〇、上篇回顾
- 前面文章介绍了整体架构的设计,知道了整个框架由
建造者
和配置器
构成,而各个建造者在前文也已经了解了,本篇来学学配置器
,了解其内部的组成成员和功能。
一、配置器接口架构
-
整体UML类图
-
展开
SecurityConfigurer
配置器的顶级接口,定义了
init()
和configure()
接口方法
init(B builder)
:初始化{@link SecurityBuilder}
configure(B builder)
:配置{@link SecurityBuilder}
必要的属性
SecurityConfigurerAdapter
{@link SecurityConfigurer}
的子类,init()
和configure()
皆为空实现,由子类去实现。它主要提供了and()
方法,用于获得对正在配置的{@link SecurityBuilder}
的访问权。
postProcess(T object)
:对传入的对象进行后置处理。and()、getBuilder()
:返回当前正在配置的SecurityBuilder
。
AbstractHttpConfigurer
继承了
SecurityConfigurerAdapter
类,增加了禁用功能,一般自定义配置器时会继承这个类。
disable()
:通过移除{@link AbstractHttpConfigurer}
来禁用该配置。withObjectPostProcessor
:调用了父类的postProcess(T object)
方法,进行对象的后置处理。
WebSecurityConfigurerAdapter
提供了一个方便的子类来创建
{@link WebSecurityConfigurer}
实例。该实现允许通过重写方法进行定制。一般我们会继承这个类来定制自己的WebSecurityConfig
。
-
configure(HttpSecurity http)
:由子类重写这个方法来配置HttpSecurity
建造者。 -
configure(AuthenticationManagerBuilder auth)
:由子类重写这个方法来配置AuthenticationManagerBuilder
建造者。 -
init(final WebSecurity web)
:- 创建
HttpSecurity
对象同时将其保存到securityFilterChainBuilders
中,用于最后真正执行时创建单个的securityFilterChain
。 - 创建一个最后执行的线程,该线程的目的是将过滤器
FilterSecurityInterceptor
添加到WebSecurity
中。
- 创建
public void init(final WebSecurity web) throws Exception {
final HttpSecurity http = getHttp();
web.addSecurityFilterChainBuilder(http).postBuildAction(new Runnable() {
public void run() {
FilterSecurityInterceptor securityInterceptor = http
.getSharedObject(FilterSecurityInterceptor.class);
web.securityInterceptor(securityInterceptor);
}
});
}
二、如何使用这个框架?
-
其实在开发的时候,
建造者我们是不会动的,我们能做的只是将我们自己的配置添加到整个架构下,所以我们能扩展的是配置器
-
可以参考其他一些源码中默认的配置器,定义我们自己
HttpConfigurer
也继承AbstractHttpConfigurer
,将自定义的单个过滤器配置到HttpSecurity
。 -
可以定义自己的
WebSecurityConfig
配置器,继承WebSecurityConfigurerAdapter
,将源码中默认的一些过滤器和自定义的过滤器配置到HttpSecurity
,由建造者创建后形成一条过滤器链。 -
可以这么理解记忆(但不是很准确)
AbstractHttpConfigurer
配置器是用来配置HttpSecurity
建造者WebSecurityConfigurerAdapter
配置器是用来配置WebSecurity
建造者
三、总结
- 其实整个配置器最重要的两个方法就是
init()
和configure()
,目的是配置WebSecurity
、HttpSecurity
和AuthenticationManagerBuilder
三个建造者,所有都配置好后就可以创建核心过滤器了。 AbstractHttpConfigurer
配置器是用来配置HttpSecurity
建造者WebSecurityConfigurerAdapter
配置器是用来配置WebSecurity
建造者
四、系列文章
Spring Security 系列
- 《手把手教你如何使用Spring Security(上):登录授权》
- 《手把手教你如何使用Spring Security(中):接口认证》
- 《手把手教你如何使用Spring Security(下):访问控制》
- 《Spring Security源码(一):整体框架设计》
- 《Spring Security源码(二):建造者详解》
- 《Spring Security源码(三):HttpSecurity详解》
- 《Spring Security源码(四):配置器详解》
- 《Spring Security源码(五):FilterChainProxy是如何创建的?》
- 《Spring Security源码(六):FilterChainProxy是如何运行的?》
- 《Spring Security源码(七):设计模式在框架中的应用》
- 《Spring Security源码(八):登录认证源码流程》
- 《Spring Security源码(九):过滤器链上的过滤器是如何排序的?》
- 《Spring Security源码(十):权限访问控制是如何做到的?》
Spring Security OAuth 系列
Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。
它的内容包括:
- 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
- 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
- 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
- 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
- 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
- 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
- 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
- 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw
目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:
想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询
同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。