【问题标题】:How to configure filter using WebSecurityConfigurerAdapter?如何使用 WebSecurityConfigurerAdapter 配置过滤器?
【发布时间】:2016-01-15 00:48:33
【问题描述】:

我正在尝试添加一个需要作为 FilterConfig 给出的参数的过滤器。我将它添加到 WebApplicationInitializer::onStartup(ServletContext container) 方法中,并且配置良好(使用正确的 FilterConfig 调用 init 方法)。

@Override
public void onStartup(ServletContext container) throws ServletException {
    super.onStartup(container);

    FilterRegistration.Dynamic urlRewriteFilter = container.addFilter("UrlRewriteFilter", UrlRewriteFilter.class);
    urlRewriteFilter.addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD), false, "/*");
    urlRewriteFilter.setInitParameter("confPath", "WEB-INF/urlrewrite-prod.xml");
}

关键是我正在使用 Spring Security WebSecurityConfigurerAdapter 并且我的过滤器从未被调用(不存在于过滤器链中)。 如果我用 addFilterAfter 添加它,就没有办法给他一个 FilterConfig。

 @Override
 protected void configure(HttpSecurity http) throws Exception {
  http
  .exceptionHandling()
    .authenticationEntryPoint(spnegoEntryPoint())
    .and()
    .authorizeRequests()
        .antMatchers("/").permitAll()
        .anyRequest().authenticated()
        .and()
    .httpBasic()
        .and()
    .logout()
        .and()
    .addFilterBefore(spnegoAuthenticationProcessingFilter(authenticationManagerBean()), BasicAuthenticationFilter.class)
    .addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class)
    .addFilterAfter(new CacheFilter(), CsrfFilter.class)
    .addFilterAfter(new UrlRewriteFilter(), CsrfFilter.class);
 }

我哪里错了?

【问题讨论】:

    标签: spring spring-security


    【解决方案1】:

    我的错误在于过滤器映射。我正在调用 addMappingForServletNames 而不是 addMappingForUrlPatterns

    @Override
    public void onStartup(ServletContext container) throws ServletException {
        super.onStartup(container);
    
        FilterRegistration.Dynamic urlRewriteFilter = container.addFilter("UrlRewriteFilter", UrlRewriteFilter.class);
        //urlRewriteFilter.addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD), false, "/*");
        urlRewriteFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD), false, "/*");
        urlRewriteFilter.setInitParameter("confPath", "WEB-INF/urlrewrite-prod.xml");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多