spring security认证的底层实现
一、官方認證圖
二、AuthenticationManager 、ProviderManager、AuthenticationProvider的關(guān)系
從上面分析中得知,AuthenticationManager 是認證的核心類,但實際上在底層真正認證時還離不開 ProviderManager 以及 AuthenticationProvider 。他們?nèi)哧P(guān)系是樣的呢?
- AuthenticationManager 是一個認證管理器,它定義了 Spring Security 過濾器要執(zhí)行認證操作。
- ProviderManager AuthenticationManager接口的實現(xiàn)類。Spring Security 認證時默認使用就是 ProviderManager。
- AuthenticationProvider 就是針對不同的身份類型執(zhí)行的具體的身份認證。
ProviderManager 是 AuthenticationManager 的唯一實現(xiàn),也是 Spring Security 默認使用實現(xiàn)。從這里不難看出默認情況下AuthenticationManager 就是一個ProviderManager。
弄清楚認證原理之后我們來看下具體認證時數(shù)據(jù)源的獲取。默認情況下 AuthenticationProvider 是由 DaoAuthenticationProvider 類來實現(xiàn)認證的,在DaoAuthenticationProvider 認證時又通過 UserDetailsService 完成數(shù)據(jù)源的校驗。他們之間調(diào)用關(guān)系如下:
總結(jié): AuthenticationManager 是認證管理器,在 Spring Security 中有全局AuthenticationManager,也可以有局部AuthenticationManager。全局的AuthenticationManager用來對全局認證進行處理,局部的AuthenticationManager用來對某些特殊資源認證處理。當(dāng)然無論是全局認證管理器還是局部認證管理器都是由 ProviderManger 進行實現(xiàn)。 每一個ProviderManger中都代理一個AuthenticationProvider的列表,列表中每一個實現(xiàn)代表一種身份認證方式。認證時底層數(shù)據(jù)源需要調(diào)用 UserDetailService 來實現(xiàn)。
三、如何配置全局AuthenticationManage
@Configuration public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {private final MyUserDetailService myUserDetailService;@Autowiredpublic WebSecurityConfigurer(MyUserDetailService myUserDetailService) {this.myUserDetailService = myUserDetailService;}// @Bean // public UserDetailsService userDetailsService() { // InMemoryUserDetailsManager userDetailsService = new InMemoryUserDetailsManager(); // 修改默認的用戶名密碼 // userDetailsService.createUser(User.withUsername("aaa").password("{noop}123").roles("admin").build()); // return userDetailsService; // }//springboot 對 security 默認配置中 在工廠中默認創(chuàng)建 AuthenticationManager // @Autowired // public void initialize(AuthenticationManagerBuilder builder) throws Exception { // 這里AuthenticationManagerBuilder是spring工廠中給我們創(chuàng)建好了的默認AuthenticationManager,拿到后就可以進行修改 // System.out.println("springboot 默認配置: " + builder); // }//自定義AuthenticationManager 推薦(會覆蓋spring工廠中的默認AuthenticationManager)并沒有在工廠中暴露出來@Overridepublic void configure(AuthenticationManagerBuilder builder) throws Exception {System.out.println("自定義AuthenticationManager: " + builder);builder.userDetailsService(myUserDetailService);}//作用: 用來將自定義AuthenticationManager在工廠中進行暴露,可以在任何位置注入@Override@Beanpublic AuthenticationManager authenticationManagerBean() throws Exception {return super.authenticationManagerBean();} } 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的spring security认证的底层实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020年中国视频内容电商行业白皮书
- 下一篇: 【干货】打造优秀B端产品需求分析流程要点