我正在为一个现有的spring项目实现adfs支持。因为我们已经有了自己的jwt身份验证,我们希望与adfs身份验证并行工作,所以我想实现一个新的过滤器链,它只处理特定的api请求路径。我的意思是我想创造:
将处理所有/adfs/saml/**api调用的adfs筛选器链
保留将处理所有restapi调用的默认过滤器链
我使用的是adfs spring安全库,它定义了如下过滤器链:
public abstract class SAMLWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
//some code
protected final HttpSecurity samlizedConfig(final HttpSecurity http) throws Exception {
http.httpBasic().authenticationEntryPoint(samlEntryPoint())
.and()
.csrf().ignoringAntMatchers("/saml/**")
.and()
.authorizeRequests().antMatchers("/saml/**").permitAll()
.and()
.addFilterBefore(metadataGeneratorFilter(), ChannelProcessingFilter.class)
.addFilterAfter(filterChainProxy(), BasicAuthenticationFilter.class);
// store CSRF token in cookie
if (samlConfigBean().getStoreCsrfTokenInCookie()) {
http.csrf()
.csrfTokenRepository(csrfTokenRepository())
.and()
.addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class);
}
return http;
}
}
我扩展了这个类:
@EnableWebSecurity
@Configuration
@Order(15)
@RequiredArgsConstructor
public class ADFSSecurityConfiguration extends SAMLWebSecurityConfigurerAdapter {
@Override
protected void configure(final HttpSecurity http) throws Exception {
samlizedConfig(http)
.authorizeRequests()
.antMatchers("/adfs")
.authenticated();
}
}
但是在调试时,我看到这个新的过滤器链被设置为匹配“any”请求。所以我可能把匹配器设置错了。
1条答案
按热度按时间l7wslrjt1#
实际上,在阅读了官方文档之后,答案很简单:(参见“创建和定制过滤链”一节)
它不应该放在后面
.authorizeRequests()
但是在第一个匹配器上有一个海峡。