自定义过滤器
Posted hanlk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义过滤器相关的知识,希望对你有一定的参考价值。
HttpSecurity
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);
}
以上是关于自定义过滤器的主要内容,如果未能解决你的问题,请参考以下文章