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);
现在我的ssoAuthenticationFilter
是FilterChainProxy
的一部分,在正确的位置。平滑。
但由于 ssoAuthenticationFilter
是 Filter
,它会被 Boot 拾取并作为过滤器包含在内。所以我的过滤器链看起来像:
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的主要内容,如果未能解决你的问题,请参考以下文章