自定义过滤器

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);
    }




以上是关于自定义过滤器的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段(vue主模板)

VSCode自定义代码片段——声明函数

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段——git命令操作一个完整流程

VSCode自定义代码片段8——声明函数

VSCode自定义代码片段1——vue主模板