這篇文章主要講解了“如何使用分布式對象SharedObject”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何使用分布式對象SharedObject”吧!
公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出隆陽免費做網(wǎng)站回饋大家。
1. 前言
在上一篇我們對AuthenticationManager的初始化的細節(jié)進行了分析,其中里面有一段代碼引起了不少同學的注意:
ApplicationContext context = http.getSharedObject(ApplicationContext.class); CaptchaAuthenticationProvider captchaAuthenticationProvider = context.getBean("captchaAuthenticationProvider", CaptchaAuthenticationProvider.class);
上面直接從HttpSecurity對象中獲取到Spring的應(yīng)用上下文對象ApplicationContext,它是怎么做到的呢?SharedObject又是個什么概念?今天就來搞清楚這個問題。
2. SharedObject
在Spring Security中SharedObject既不是對象也不是接口,而是某一類“可共享”的對象的統(tǒng)稱。
顧名思義,SharedObject的意思是可共享的對象。它的作用是如果一些對象你希望在不同的作用域配置中共享它們就把這些對象變成SharedObject,有點分布式對象的感覺。為了更加便于你理解,下面是相關(guān)的體系結(jié)構(gòu):
配置類的組織架構(gòu)
AbstractConfiguredSecurityBuilder或者HttpSecurityBuilder的實現(xiàn)類才具有操作SharedObject的能力。一種是注冊SharedObject,另一種是獲取SharedObject。
SharedObject 的注冊
SharedObject會以其Class類型為Key,實例為Value存儲到一個HashMap
注入AuthenticationManagerBuilder
我們熟知的AuthenticationManagerBuilder在這里被共享。
還有一部分是在所有的HttpSecurityBuilder對象初始化時注冊的。它初始化和配置都是由SecurityConfigurer來完成的:
public interface SecurityConfigurer<O, B extends SecurityBuilder<O>> { void init(B builder) throws Exception; void configure(B builder) throws Exception; }
上面兩個方法分別用來初始化和配置HttpSecurityBuilder。比如我們熟知的WebSecurityConfigurerAdapter就是用來配置HttpSecurity的,在其init方法中我們可以找到相關(guān)的代碼:
private Map<Class<?>, Object> createSharedObjects() { Map<Class<?>, Object> sharedObjects = new HashMap<>(); sharedObjects.putAll(localConfigureAuthenticationBldr.getSharedObjects()); sharedObjects.put(UserDetailsService.class, userDetailsService()); sharedObjects.put(ApplicationContext.class, context); sharedObjects.put(ContentNegotiationStrategy.class, contentNegotiationStrategy); sharedObjects.put(AuthenticationTrustResolver.class, trustResolver); return sharedObjects; }
這也是我在文章開頭可以獲取到ApplicationContext的根本原因。
SharedObject 的獲取和使用
我們能獲取到哪些被標記為SharedObject類呢?SecurityConfigurer有很多實現(xiàn),這些實現(xiàn)都是用來配置一些特定的同認證授權(quán)相關(guān)的功能的。比如OAuth3ClientConfigurer用來配置 OAuth3 客戶端的,它里面就將常用的一些對象設(shè)置為SharedObject:
public OAuth3ClientConfigurer<B> clientRegistrationRepository(ClientRegistrationRepository clientRegistrationRepository) { Assert.notNull(clientRegistrationRepository, "clientRegistrationRepository cannot be null"); this.getBuilder().setSharedObject(ClientRegistrationRepository.class, clientRegistrationRepository); return this; }
當你在HttpSecurity的配置中的其它地方需要用到ClientRegistrationRepository時,你可以直接通過getSharedObject獲取,就像文章開頭一樣,而不用在去寫一些獲取方法了。
感謝各位的閱讀,以上就是“如何使用分布式對象SharedObject”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對如何使用分布式對象SharedObject這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
網(wǎng)頁題目:如何使用分布式對象SharedObject
轉(zhuǎn)載來源:http://www.rwnh.cn/article10/jipjdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站設(shè)計、品牌網(wǎng)站建設(shè)、做網(wǎng)站、手機網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)