自定义过滤器

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);
    }
posted @ 2020-06-26 11:05  西红柿鸡蛋面~  阅读(94)  评论(0编辑  收藏