【问题标题】:Spring security and custom AuthenticationFilter with Spring bootSpring 安全性和自定义 AuthenticationFilter 与 Spring boot
【发布时间】:2014-10-23 11:08:59
【问题描述】:

我有自定义身份验证过滤器,它创建 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(弹簧自动配置)
    • ...
    • SecurityContextPersistenceFilter
    • ssoAuthenticationFilter(包含在http.addFilterAfter(...)中)
    • ...
  • 其他一些过滤器

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

非常感谢任何提示。

【问题讨论】:

    标签: java spring spring-security spring-boot


    【解决方案1】:

    2 个选择:

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

    2. 不要为您的过滤器创建 @Bean 定义(通常我会这样做,但 YMMV 因为您可能依赖自动装配或其他东西来使其工作)

    【讨论】:

    • 是否有计划将 Spring Security 过滤器配置与 Spring Boot 方式融合?我希望能够设置我的 servlet 过滤器的顺序,包括能够在安全过滤器之前放置一个,而不必弄乱HttpSecurity
    • 不要以为我理解那个(而且它似乎没有为答案添加任何内容)。无论如何,您不能将安全过滤器作为有序 bean,因为在一个上下文中可以有多个过滤器链。
    猜你喜欢
    • 2013-05-22
    • 2016-07-14
    • 1970-01-01
    • 2016-02-10
    • 2016-05-03
    • 2017-06-27
    • 2015-02-15
    • 1970-01-01
    • 2015-04-12
    相关资源
    最近更新 更多