我们有一个如下配置:
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
public static final String LOGIN_PATH_EXPRESSION = "/login";
public static final String API_PATH_EXPRESSION = "/api/**/*";
public static final String GLOBAL_PATH_EXPRESSION = "/**/*";
@Autowired
@Qualifier("ssoFilter")
private Filter ssoFilter;
@Autowired
private VerifyingProcessingFilter verifyingProcessingFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.userDetailsService(username -> new User(username, "", Collections.emptyList()))
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers(LOGIN_PATH_EXPRESSION)
.authenticated()
.and()
.httpBasic()
.and()
.authenticationProvider(new SimpleAuthenticationProvider())
.authorizeRequests()
.antMatchers(API_PATH_EXPRESSION).authenticated()
.and()
.addFilterBefore(ssoFilter, BasicAuthenticationFilter.class)
.addFilterAfter(verifyingProcessingFilter, FilteredOAuth2AuthenticationProcessingFilter.class)
.authorizeRequests()
.antMatchers(GLOBAL_PATH_EXPRESSION)
.permitAll()
.and()
.csrf()
.disable();
}
并意识到我们在
FilteredOAuth2AuthenticationProcessingFilter
调用内的/login
内部结束,并问自己为什么会这样。目标是仅在使用路径
ssoFilter
命中端点时才应用verifyingProcessingFilter
和api/**/*
。现在,我们必须在过滤器内部添加一个AntMatching检查,以便仅将其应用于正确的请求,但我认为应该只可以将其添加到匹配的请求中。
有人可以提供一个示例,说明如何向一个特定的“ Ant 匹配”路径请求添加过滤器吗?
最佳答案
看起来您无法使用单个Configuration类来做到这一点。看一下这个问题:How to apply spring security filter only on secured endpoints?。
在这种情况下,我认为更好的解决方案是配置多个HttpSecurity。从Spring IO documentation:
该文档有一个完整的示例,其中包含完成此操作的必要步骤:
祝你好运!