我有一个使用spring-security core v4.1.1.RELEASE的spring-boot应用程序(spring-boot v1.3.3.RELEASE).
看来,如果我通过扩展OncePerRequestFilter或GenericFilterBean来制作自定义滤镜豆,则无论我是否在自定义中传递给configure()的HttpSecurity对象上调用addFilter(),我的滤镜都会自动添加到滤镜链中WebSecurityConfigurerAdapter类.
这是自定义过滤器代码:
@Component
public class CustomFilter extends GenericFilterBean {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws ServletException, IOException {
// custom filter code here
}
}
这是缩写的安全配置代码:
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
// not adding the custom filter here
http.authorizeRequests()
.antMatchers("/api/login/**").permitAll()
.anyRequest().authenticated();
}
}
我观察到的是,即使我没有将其添加到过滤器链中,所有请求,即使是对/ api / login的请求,都将通过CustomFilter.如果我声明的CustomFilter没有任何@Configuration或@Bean批注,则除非将其在SecurityConfiguration类中明确告知,否则不会将其添加到过滤器链中.
我的问题:这是预期的行为吗?如果是这样,为什么?在我看来,由于缺少更好的词,将过滤器自动添加到过滤器链是很危险的-无论我在SecurityConfiguration中指定了什么,每个请求都会通过过滤器.