Spring安全和自定义AuthenticationFilter与Spring启动

时间:2014-08-29 12:25:37

标签: java spring spring-security spring-boot

我有自定义身份验证过滤器,可创建PreAuthenticatedAuthenticationToken并将其存储在安全上下文中。一切正常。这是配置:

@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private SsoAuthenticationProvider authenticationProvider;

    @Autowired
    private SsoAuthenticationFilter ssoAuthenticationFilter;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.addFilterAfter(ssoAuthenticationFilter, SecurityContextPersistenceFilter.class);
    }
}

现在我的ssoAuthenticationFilterFilterChainProxy的一部分,位于正确的位置。光滑。

但是当ssoAuthenticationFilterFilter时,它会被Boot选中并作为过滤器包含在内。所以我的过滤器链看起来很像:

  • ssoAuthenticationFilter(包含因为Filter
  • filterChainProxy(spring autoconfiguration)
    • ...
    • SecurityContextPersistenceFilter
    • ssoAuthenticationFilter(由http.addFilterAfter(...)包含)
    • ...
  • 其他一些过滤器

显然,我想摆脱ssoAuthenticationFilter在这里(列出的第一个)的自动注册。

任何提示非常感谢。

1 个答案:

答案 0 :(得分:11)

2个选择:

  1. 使用您的过滤器bean作为目标过滤器添加FilterRegistrationBean @Bean,并将其标记为enabled = false

  2. 不要为您的过滤器创建@Bean定义(通常是我所做的,但YMMV,因为您可能依赖于自动装配或某些东西让它工作)