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


我有自定义身份验证过滤器创建 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);
    }
}

现在我的 ssoAuthenticationFilter 是的一部分 FilterChainProxy,在正确的位置。光滑。

但是作为 ssoAuthenticationFilter 是 Filter 它被Boot接收并作为过滤器包含在内。所以我的过滤器链看起来像:

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

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

任何提示非常感谢。


2427
2017-08-29 12:25


起源



答案:


2种选择:

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

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


11
2017-08-29 13:00



你就是男人 - 就像Spring靴子一样。 - Jan Zyka
是否有任何计划将Spring Security过滤器配置与Spring Boot方式相结合?我希望能够设置我的servlet过滤器的顺序,包括能够在安全过滤器之前放置一个而不必弄乱 HttpSecurity - Adam
不要以为我理解那个(并且它似乎没有添加任何答案)。无论如何,您不能将安全过滤器作为有序bean来执行,因为在一个上下文中可以有多个过滤器链。 - Dave Syer


答案:


2种选择:

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

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


11
2017-08-29 13:00



你就是男人 - 就像Spring靴子一样。 - Jan Zyka
是否有任何计划将Spring Security过滤器配置与Spring Boot方式相结合?我希望能够设置我的servlet过滤器的顺序,包括能够在安全过滤器之前放置一个而不必弄乱 HttpSecurity - Adam
不要以为我理解那个(并且它似乎没有添加任何答案)。无论如何,您不能将安全过滤器作为有序bean来执行,因为在一个上下文中可以有多个过滤器链。 - Dave Syer