Java 过滤模式定义不适用于';不适用
我通过Java 过滤模式定义不适用于';不适用,java,spring,spring-security,Java,Spring,Spring Security,我通过@Bean注释定义了我的AlanCookieFilter: @Bean public Filter alanCookieFilter() { return new AlanCookieFilter(); // type of AbstractPreAuthenticatedProcessingFilter } 然后,我使用WebSecurityConfigurerAdapter添加了我的过滤器: @Configuration public class Al
@Bean
注释定义了我的AlanCookieFilter
:
@Bean
public Filter alanCookieFilter() {
return new AlanCookieFilter(); // type of AbstractPreAuthenticatedProcessingFilter
}
然后,我使用WebSecurityConfigurerAdapter
添加了我的过滤器:
@Configuration
public class AlanOAuthWebConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.addFilter(alanCookieFilter()).antMatcher("/**");
}
}
但当我启动应用程序时,我收到以下日志消息:
o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'alanCookieFilter' to: [/*]
似乎
AlanCookieFilter
仍然映射到/*
,而不是/**
。我完全被这种挥舞行为弄糊涂了。您添加了两次过滤器。第一次是作为Servlet,第二次是在Spring Security中
默认情况下,Spring Boot将过滤器映射到/*
,请参阅:
默认情况下,如果上下文只包含一个Servlet,它将被映射到/
。在多个servlet bean的情况下,bean名称将用作路径前缀。过滤器将映射到/*
如果基于约定的映射不够灵活,您可以使用ServletRegistrationBean
和FilterRegistrationBean
类进行完全控制。如果bean实现了ServletContextInitializer
接口,那么也可以直接注册项
要更改映射,请参见:
您应该只将Spring安全过滤器(或扩展)添加到过滤器链中,请参阅:
添加一个筛选器,该筛选器必须是安全框架中提供的筛选器的实例或扩展其中一个筛选器
您的筛选器扩展了AbstractPreAuthenticatedProcessingFilter,只应添加到筛选器链中
停止Spring引导以映射过滤器的一种方法是:不要使用@Bean
公开过滤器,请参阅
当使用嵌入式servlet容器时,您可以将servlet和过滤器直接注册为springbean