标签:filters inter throw 配置方法 not red ber 定义 figure
HttpSecurity的作用实际上就是在配置Spring Security的过滤器链,诸如CSRF、CORS、表单登录等,每个配置器对应一个过滤器。我们可以通过 HttpSecurity 配置过滤器的行为,甚至可以像CRSF一样直接关闭过滤器。
例如,SessionManagement:
HttpSecurity.class
SpringSecurity通过SessionManagementConfigurer 来配置SessionManagement的行为。与SessionManagementConfigurer 类似的配置器还有 CorsConfigurer、RememberMeConfigurer 等,它们都实现了SecurityConfigurer的标准接口:
public interface SecurityConfigurer<O, B extends SecurityBuilder<O>> {
//各个配置器被初始化配置器
void init(B var1) throws Exception;
//各个配置器被统一调用的配置方法
void configure(B var1) throws Exception;
}
和其他配置器一样,SessionManagementConfigurer也是在configure方法中将最终的SessionManagementFilter插入过滤器链来实现会话管理的。
除Spring Security提供的过滤器外,我们还可以添加自己的过滤器以实现更多的安全功能,这些都可以在HttpSecurity中实现。
HttpSecurity:
//将自定义过滤器添加在指定过滤器之后
public HttpSecurity addFilterAfter(Filter filter, Class<? extends Filter> afterFilter) {
this.comparator.registerAfter(filter.getClass(), afterFilter);
return this.addFilter(filter);
}
//将自定义过滤器添加在指定过滤器之前
public HttpSecurity addFilterBefore(Filter filter, Class<? extends Filter> beforeFilter) {
this.comparator.registerBefore(filter.getClass(), beforeFilter);
return this.addFilter(filter);
}
//添加过滤器(必须是SpringSecurity自带的过滤器实现或器子类)
public HttpSecurity addFilter(Filter filter) {
Class<? extends Filter> filterClass = filter.getClass();
if (!this.comparator.isRegistered(filterClass)) {
throw new IllegalArgumentException("The Filter class " + filterClass.getName() + " does not have a registered order and cannot be added without a specified order. Consider using addFilterBefore or addFilterAfter instead.");
} else {
this.filters.add(filter);
return this;
}
}
//添加一个过滤器在指定过滤器位置
public HttpSecurity addFilterAt(Filter filter, Class<? extends Filter> atFilter) {
this.comparator.registerAt(filter.getClass(), atFilter);
return this.addFilter(filter);
}
标签:filters inter throw 配置方法 not red ber 定义 figure
原文地址:https://www.cnblogs.com/hanlk/p/13193923.html