成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Security 實戰干貨:分布式對象SharedObject

開發 前端 分布式
顧名思義,SharedObject的意思是可共享的對象。它的作用是如果一些對象你希望在不同的作用域配置中共享它們就把這些對象變成SharedObject,有點分布式對象的感覺。

[[378938]]

 1. 前言

在上一篇我們對AuthenticationManager的初始化的細節進行了分析,其中里面有一段代碼引起了不少同學的注意:

  1. ApplicationContext context = http.getSharedObject(ApplicationContext.class); 
  2.     CaptchaAuthenticationProvider captchaAuthenticationProvider = context.getBean("captchaAuthenticationProvider", CaptchaAuthenticationProvider.class); 

上面直接從HttpSecurity對象中獲取到Spring的應用上下文對象ApplicationContext,它是怎么做到的呢?SharedObject又是個什么概念?今天就來搞清楚這個問題。

2. SharedObject

在Spring Security中SharedObject既不是對象也不是接口,而是某一類“可共享”的對象的統稱。

顧名思義,SharedObject的意思是可共享的對象。它的作用是如果一些對象你希望在不同的作用域配置中共享它們就把這些對象變成SharedObject,有點分布式對象的感覺。為了更加便于你理解,下面是相關的體系結構:

配置類的組織架構

AbstractConfiguredSecurityBuilder或者HttpSecurityBuilder的實現類才具有操作SharedObject的能力。一種是注冊SharedObject,另一種是獲取SharedObject。

SharedObject 的注冊

SharedObject會以其Class類型為Key,實例為Value存儲到一個HashMap

注入AuthenticationManagerBuilder

我們熟知的AuthenticationManagerBuilder在這里被共享。

還有一部分是在所有的HttpSecurityBuilder對象初始化時注冊的。它初始化和配置都是由SecurityConfigurer來完成的:

  1. public interface SecurityConfigurer<O, B extends SecurityBuilder<O>> { 
  2.  
  3.    void init(B builder) throws Exception; 
  4.  
  5.    void configure(B builder) throws Exception; 

上面兩個方法分別用來初始化和配置HttpSecurityBuilder。比如我們熟知的WebSecurityConfigurerAdapter就是用來配置HttpSecurity的,在其init方法中我們可以找到相關的代碼:

  1. private Map<Class<?>, Object> createSharedObjects() { 
  2.    Map<Class<?>, Object> sharedObjects = new HashMap<>(); 
  3.    sharedObjects.putAll(localConfigureAuthenticationBldr.getSharedObjects()); 
  4.    sharedObjects.put(UserDetailsService.class, userDetailsService()); 
  5.    sharedObjects.put(ApplicationContext.class, context); 
  6.    sharedObjects.put(ContentNegotiationStrategy.class, contentNegotiationStrategy); 
  7.    sharedObjects.put(AuthenticationTrustResolver.class, trustResolver); 
  8.    return sharedObjects; 

這也是我在文章開頭可以獲取到ApplicationContext的根本原因。

SharedObject 的獲取和使用

我們能獲取到哪些被標記為SharedObject類呢?SecurityConfigurer有很多實現,這些實現都是用來配置一些特定的同認證授權相關的功能的。比如OAuth2ClientConfigurer用來配置 OAuth2 客戶端的,它里面就將常用的一些對象設置為SharedObject:

  1. public OAuth2ClientConfigurer<B> clientRegistrationRepository(ClientRegistrationRepository clientRegistrationRepository) { 
  2.    Assert.notNull(clientRegistrationRepository, "clientRegistrationRepository cannot be null"); 
  3.    this.getBuilder().setSharedObject(ClientRegistrationRepository.class, clientRegistrationRepository); 
  4.    return this; 

 

當你在HttpSecurity的配置中的其它地方需要用到ClientRegistrationRepository時,你可以直接通過getSharedObject獲取,就像文章開頭一樣,而不用在去寫一些獲取方法了。

 

3. 總結

SharedObject是Spring Security提供的一個非常好用的功能,如果你在不同的地方需要對一個對象重復使用就可以將它注冊為SharedObject,甚至直接注入Spring IoC像開頭那樣獲取就可以了。這個特性能夠簡化配置,提高代碼的可讀性,也為Spring Security的DSL特性打下了基礎。

本文轉載自微信公眾號「碼農小胖哥」,可以通過以下二維碼關注。轉載本文請聯系碼農小胖哥公眾號。

 

責任編輯:武曉燕 來源: 碼農小胖哥
相關推薦

2020-07-03 13:29:08

Redis集群哈希槽

2021-04-23 07:33:10

SpringSecurity單元

2021-05-31 07:18:46

SpringSecurity信息

2021-04-19 07:33:04

WebSecuritySpringHttpSecurit

2009-06-12 11:42:28

EJB分布式

2020-09-21 09:15:12

系統

2019-08-05 07:58:01

分布式架構系統

2023-01-13 07:39:07

2019-10-10 09:16:34

Zookeeper架構分布式

2019-06-19 15:40:06

分布式鎖RedisJava

2023-05-29 14:07:00

Zuul網關系統

2017-09-01 05:35:58

分布式計算存儲

2023-05-05 06:13:51

分布式多級緩存系統

2021-03-10 09:54:06

Redis分布式

2021-03-14 18:23:18

邊緣計算對象存儲分布式計算

2019-11-22 09:40:40

SpringJava編程語言

2017-10-27 08:40:44

分布式存儲剪枝系統

2019-08-22 14:30:21

技術Redis設計

2022-04-08 11:08:17

分布式數據接口同步機制

2023-10-26 18:10:43

分布式并行技術系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕av一区二区三区 | 国产高清精品一区二区三区 | 中文字幕在线精品 | 日韩高清国产一区在线 | 国产精品国产精品国产专区不片 | 日韩一区二区在线视频 | 国产美女免费视频 | 在线免费中文字幕 | 亚洲一区国产精品 | 欧美一级二级三级视频 | 91精品国产91久久久久久最新 | 欧美一区二区三区久久精品视 | 日韩久久久久久 | 香蕉视频在线播放 | 国产精品视频播放 | 国产第一页在线播放 | 狠狠干天天干 | 精品国产乱码久久久久久闺蜜 | 一区二区三区免费 | 成人福利网站 | 夜夜骑首页 | 中午字幕在线观看 | 精品久久久久久久久久久 | 成人久草| 欧美成人综合 | 国产精品地址 | 亚洲精品福利在线 | 亚洲午夜精品一区二区三区他趣 | 懂色中文一区二区在线播放 | 91久久久精品国产一区二区蜜臀 | 亚洲精品自拍 | 免费一二区| 秋霞在线一区 | 亚洲综合在线网 | 在线看亚洲 | 91成人免费看片 | 亚洲一区免费 | 日韩高清一区二区 | 亚洲 欧美 另类 日韩 | 欧美a区 | 久久69精品久久久久久久电影好 |