Spring 安全性和自定义 AuthenticationFilter 与 Spring boot

Posted

技术标签:

【中文标题】Spring 安全性和自定义 AuthenticationFilter 与 Spring boot【英文标题】:Spring security and custom AuthenticationFilter with 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 的自动注册(列出的第一个)。

非常感谢任何提示。

【问题讨论】:

【参考方案1】:

2 个选择:

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

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

【讨论】:

是否有计划将 Spring Security 过滤器配置与 Spring Boot 方式融合?我希望能够设置我的 servlet 过滤器的顺序,包括能够在安全过滤器之前放置一个,而不必弄乱HttpSecurity 不要以为我理解那个(而且它似乎没有为答案添加任何内容)。无论如何,您不能将安全过滤器作为有序 bean,因为在一个上下文中可以有多个过滤器链。

以上是关于Spring 安全性和自定义 AuthenticationFilter 与 Spring boot的主要内容,如果未能解决你的问题,请参考以下文章

SPRING:向Spring安全用户添加自定义用户详细信息

Spring、Jackson 和自定义(例如 CustomDeserializer)

Spring标准事件和自定义事件-观察者模式

Spring标准事件和自定义事件-观察者模式

Spring标准事件和自定义事件-观察者模式

Spring标准事件和自定义事件-观察者模式