web.ignoring() 在存在 addFilterBefore(customFilter(), AbstractPreAuthenticatedProcessingFilter.class) 时不起作用
web.ignoring() is not working when addFilterBefore(customFilter(), AbstractPreAuthenticatedProcessingFilter.class) is present
使用 Spring 引导 2.2。4.RELEASE、spring-security-oauth2-2.3.3
、spring-security-web-5.2.1
。
我已成功设置我的 oauth2 服务器并使用 WebSecurityConfigurerAdapter
和 ResourceServerConfigurer
保护我的端点。
我遇到的问题是,当我在 ResourceServerConfigurer
中使用 addFilterBefore(customFilter(), AbstractPreAuthenticatedProcessingFilter.class)
时。 调用不安全的路径仍然尝试验证而不是被忽略,请求尝试通过我的 customFilter()
.
我确实手动设置了我所有的自定义过滤器,而不是作为 beans,所以它们不会被 spring 自动添加到过滤器链中,但我仍然遇到这种行为。
我还使用了 ("/rest/**", "/api/**")
蚂蚁匹配器,因此 customFilter() 仅在遇到这些路径时适用,但我仍然会遇到这种行为。
在服务器启动时我确实看到了这个,其目的是:
org.springframework.security.web.DefaultSecurityFilterChain - Creating filter chain: Ant [pattern='/usecured*'], []
org.springframework.security.web.DefaultSecurityFilterChain - Creating filter chain: Ant [pattern='/unsecured2*'], []
org.springframework.security.web.DefaultSecurityFilterChain - Creating filter chain: Ant [pattern='/usecured3*'], []
我的 WebSecurityConfigurerAdapter
@EnableWebSecurity
@Configuration
@Order(1) // order 1 so it applies before ResourceServerConfigurer paths
@EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true)
public class ApiSecurityRestLoginConfig extends WebSecurityConfigurerAdapter {
//...
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/usecured*","/unsecured2*","/usecured3*");
}
}
我的 ResourceServerConfigurer
@EnableResourceServer
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true)
public class ApiSecurityResourceServerConfig implements ResourceServerConfigurer {
//...
@Override
public void configure(HttpSecurity http) throws Exception {
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.authorizeRequests().antMatchers("/rest/**", "/api/**").authenticated()
.and()
//..
.addFilterBefore(customFilter(), AbstractPreAuthenticatedProcessingFilter.class) // <-- when I remove this line, web.ignoring() works, otherwise it doesn't.
//..
}
}
这是一个错误还是我处理错误的方式?
供参考
我将我的 web.ignoring() 代码更新为这个
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/usecured*/**","/unsecured2*/**","/usecured3*/**");
}
成功了。
使用 Spring 引导 2.2。4.RELEASE、spring-security-oauth2-2.3.3
、spring-security-web-5.2.1
。
我已成功设置我的 oauth2 服务器并使用 WebSecurityConfigurerAdapter
和 ResourceServerConfigurer
保护我的端点。
我遇到的问题是,当我在 ResourceServerConfigurer
中使用 addFilterBefore(customFilter(), AbstractPreAuthenticatedProcessingFilter.class)
时。 调用不安全的路径仍然尝试验证而不是被忽略,请求尝试通过我的 customFilter()
.
我确实手动设置了我所有的自定义过滤器,而不是作为 beans,所以它们不会被 spring 自动添加到过滤器链中,但我仍然遇到这种行为。
我还使用了 ("/rest/**", "/api/**")
蚂蚁匹配器,因此 customFilter() 仅在遇到这些路径时适用,但我仍然会遇到这种行为。
在服务器启动时我确实看到了这个,其目的是:
org.springframework.security.web.DefaultSecurityFilterChain - Creating filter chain: Ant [pattern='/usecured*'], []
org.springframework.security.web.DefaultSecurityFilterChain - Creating filter chain: Ant [pattern='/unsecured2*'], []
org.springframework.security.web.DefaultSecurityFilterChain - Creating filter chain: Ant [pattern='/usecured3*'], []
我的 WebSecurityConfigurerAdapter
@EnableWebSecurity
@Configuration
@Order(1) // order 1 so it applies before ResourceServerConfigurer paths
@EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true)
public class ApiSecurityRestLoginConfig extends WebSecurityConfigurerAdapter {
//...
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/usecured*","/unsecured2*","/usecured3*");
}
}
我的 ResourceServerConfigurer
@EnableResourceServer
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true)
public class ApiSecurityResourceServerConfig implements ResourceServerConfigurer {
//...
@Override
public void configure(HttpSecurity http) throws Exception {
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.authorizeRequests().antMatchers("/rest/**", "/api/**").authenticated()
.and()
//..
.addFilterBefore(customFilter(), AbstractPreAuthenticatedProcessingFilter.class) // <-- when I remove this line, web.ignoring() works, otherwise it doesn't.
//..
}
}
这是一个错误还是我处理错误的方式?
供参考
我将我的 web.ignoring() 代码更新为这个
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/usecured*/**","/unsecured2*/**","/usecured3*/**");
}
成功了。