SpringSecurity的XML文件配置
在配置文件中通过 security:http 等标签来定义了认证需要的相关信息
SpringSecurity的HttpSecurity配置
在SpringBoot项目中,脱离了xml配置文件的方式,在SpringSecurity中提供了HttpSecurity等工具类,这里HttpSecurity就等同于在配置文件中定义的http标签。
通过代码结果来看和配置文件的效果是一样的。基于配置文件的方式是通过标签对应的handler来解析处理的,HttpSecurity这块是如何处理的呢?接下来详细分析下。
HttpSecurity的类图结构
可以看出HttpSecurity的类图结构相对比较简单,继承了一个父类,实现了两个接口
1.SecurityBuilder接口
SecurityBuilder接口通过字面含义可以发现这是一个创建对象的工具类。
public interface SecurityBuilder<O> {
/**
* Builds the object and returns it or null.
* @return the Object to be built or null if the implementation allows it.
* @throws Exception if an error occurred when building the Object
*/
O build() throws Exception;
}
通过源码可以看到在SecurityBuilder中提供了一个build()方法。在接口名称处声明了一个泛型,而build()方法返回的正好是这个泛型的对象,也就是SecurityBuilder会创建指定类型的对象。结合HttpSecurity中实现SecurityBuilder接口时指定的泛型可以看出创建的具体对象是什么类型。
可以看出SecurityBuilder会通过build方法创建一个DefaultSecurityFilterChain对象。也就是拦截请求的那个默认的过滤器链对象。
然后进入到doBuild()方法,会进入到AbstractConfiguredSecurityBuilder中的方法
@Override
protected final O doBuild() t