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

Jan*_*yka 12 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我ssoAuthenticationFilterFilterChainProxy正确位置的一部分.平滑.

但由于ssoAuthenticationFilterFilter它得到通过引导拾起并作为过滤器.所以我的滤镜链看起来像:

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

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

任何提示非常感谢.

Dav*_*yer 11

2种选择:

  1. 添加一个FilterRegistrationBean @Bean过滤器bean作为其目标过滤器,并将其标记为enabled = false

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