代码之家  ›  专栏  ›  技术社区  ›  Meena Chaudhary

非Spring安全过滤器的相对顺序(如addFilterAfter、addFilterBefore)?

  •  0
  • Meena Chaudhary  · 技术社区  · 6 年前

    我使用的是SpringBoot2.0.4.release,我有两个过滤器( java.servlet.filter ) RequestHeaderParseFilter RequestLogFilter . 请求头parsefilter 从请求头检索和设置值。和 请求日志筛选器 记录它们。我用 FilterRegistrationBean

    @Bean
    public FilterRegistrationBean requestHeaderParseFilter () {
      FilterRegistrationBean registration = new FilterRegistrationBean();
      Filter requestHeaderParseFilter = new RequestHeaderParseFilter();
      this.beanFactory.autowireBean(requestHeaderParseFilter);
      registration.setFilter(requestHeaderParseFilter);
      registration.addUrlPatterns("/*");
      return registration;
    }
    
    @Bean
    public FilterRegistrationBean requestLogFilter() {
    
      FilterRegistrationBean registration = new FilterRegistrationBean();
      Filter requestLogFilter = new RequestLogFilter();
      this.beanFactory.autowireBean(requestLogFilter);
      registration.setFilter(requestLogFilter);
      registration.addUrlPatterns("/rest/*");
      return registration;
    }
    

    我想点菜 请求日志筛选器 之后 请求头parsefilter 在过滤链中。但我不想用 RegistrationBean.setOrder(int) . 在这种情况下,我有以下选择和问题:

    1. 我试着用 addFilterAfter 提供弹簧安全过滤器链,如下所示

      @Inject
      @Qualifier("requestLogFilter")
      private FilterRegistrationBean<Filter> filterRegistrationBean;
      
      .addFilterAfter(this.filterRegistrationBean.getFilter(), RequestHeaderParseFilter.class);
      

      首先,这会抛出一个错误 Error creating bean with name 'springSecurityFilterChain'. Cannot register after unregistered Filter class . 这意味着什么 请求头parsefilter 未在安全筛选器链中注册。

      Q1。 我需要显式地向spring安全过滤器链注册我的过滤器吗?

      即使这样,将这些过滤器添加到spring security过滤器链中也感觉不直观,因为它们与安全性无关。

    2. 不要将这些过滤器注册为spring security过滤器,而应将其注册为某些通用过滤器链的一部分。

      Q2。 除了弹簧安全过滤链。春天还有其他过滤链吗?

      Q3。 有什么我可以用的吗 AddFilterAfter后 订购我的过滤器而不使用弹簧安全过滤器链?

    0 回复  |  直到 6 年前