SpringSecurity之FormLoginConfigurer的泛型参数分析
1. FormLoginConfigurer说明
SpringSecurity采用了一系列的Configurer配置来统一配置过滤器链及其中的 Bean对象配置等,通过全局共享Bean对象实现不同地方注入同一个对象
FormLoginConfigurer 主要用于配置UsernamePasswordAuthenticationFilter这个过滤器,也就是默认的表单登录的过滤器
2. FormLoginConfigurer解析
先说结论,FormLoginConfigurer
有一个泛型<H extendsHttpSecurityBuilderAbstractAuthenticationFilterConfigurer
有三个泛型,
FormLoginConfigurer
对父类的填充
填充第一泛型为自己定义的泛型H(实际上是HttpSecurity),
填充第二个泛型为自身FormLoginConfigurer
填充第三个泛型为UsernamePasswordAuthenticationFilter
,表明生成的过滤器为UsernamePasswordAuthenticationFilter
FormLoginConfigurer 类
1 | public final class FormLoginConfigurer<H extends HttpSecurityBuilder<H>> extends |
3. FormLoginConfigurer 继承关系
根据以上的图片,我们从顶至下分析
3.1. SecurityConfigurer
1 | public interface SecurityConfigurer<O, B extends SecurityBuilder<O>> { |
泛型O代表配置完成的Object对象,在泛型B(SecurityBuilder)中配置完成
泛型B代表Builder,实际上应用中是HttpSecurity
3.2. SecurityConfigurerAdapter 类
1 | public abstract class SecurityConfigurerAdapter<O, B extends SecurityBuilder<O>> |
和父类SecurityConfigurer一致
泛型O代表配置完成的对象
泛型B代表Builder,
3.3. AbstractHttpConfigurer
1 | public abstract class AbstractHttpConfigurer<T extends AbstractHttpConfigurer<T, B>, B extends HttpSecurityBuilder<B>> |
泛型T代表AbstractHttpConfigurer的实例自己
B代表Builder
父类的O已经定义成DefaultSecurityFilterChain,表示配置返回了DefaultSecurityFilterChain过滤器链,也就是security的主要过滤器链存储地
3.4. AbstractAuthenticationFilterConfigurer
1 | public abstract class AbstractAuthenticationFilterConfigurer< |
泛型B代表Builder,
泛型T代表配置对象自己
泛型F代表认证过滤器,这里AbstractAuthenticationProcessingFilter已经具体到认证的过滤器了
3.5. FormLoginConfigurer
public final class FormLoginConfigurer<H extends HttpSecurityBuilder
extends AbstractAuthenticationFilterConfigurer<H, FormLoginConfigurer
}
泛型H代表Builder,和父类B的泛型是一致的
其余已经都具体化了,父类的T具体了是自己,父类的F过滤器具体了是UsernamePasswordAuthenticationFilter这个过滤器