【发布时间】:2016-12-27 08:12:34
【问题描述】:
我有一个扩展 AbstractAuthenticationProcessingFilter 的过滤器。
在我下面的安全配置类中,
@Override
protected void configure(final HttpSecurity http) throws Exception {
http.addFilterBefore(getMyFilter(), BasicAuthenticationFilter.class);
http.addFilterAfter(getMyFilter2(), MyFilter.class);
http.csrf().disable().authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/**").permitAll();
}
private MyFilter getMyFilter() {
return new MyFilter(properties, apiConsumer);
}
当我使用邮递员调用 REST 端点时,MyFilter 的 doFilter 方法会被命中两次。在这两种情况下,它在ServletRequest 中都有相同的requestedSessionId 和strippedServletPath。
但是扩展GenericFilterBean 的MyFilter2 只能调用一次。
过滤器执行顺序为MyFilter.doFilter -> MyFilter2.doFilter -> MyFilter.doFilter
原因是什么?如何找到根本原因?
【问题讨论】:
-
我已经用@Component 注释定义了 MyFilter。当我删除该注释时,它只命中一次
标签: java spring spring-security spring-boot