• 自定义过滤器


    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);
        }
    
  • 相关阅读:
    从屏幕刷新频率到Unity VSync
    TextMesh Pro不能显示中文的解决办法是创建字贴图,常用汉字3500+特殊字符
    50 个 Chrome Developer Tools 必备技巧
    Unity发布到Google Play应用上架流程
    Unity Shader入门
    Unity2019游戏框架搭建第一季C# 核心知识与简易框架搭建 + Unity2019 游戏框架搭建第二季:UI 模块与资源模块持续精进
    TextMesh Pro不能显示中文的解决办法是创建字贴图,常用汉字3500
    permanently
    UE4地编大型开放世界~制作烘焙全流程
    Unity高级游戏地编案例
  • 原文地址:https://www.cnblogs.com/hanlk/p/13193923.html
Copyright © 2020-2023  润新知