创建2个特定匹配过滤器链

uyto3xhc  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(399)

我正在为一个现有的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”请求。所以我可能把匹配器设置错了。

l7wslrjt

l7wslrjt1#

实际上,在阅读了官方文档之后,答案很简单:(参见“创建和定制过滤链”一节)

@Override
    protected void configure(final HttpSecurity http) throws Exception {
        samlizedConfig(http)
                .antMatcher("/adfs/**");
    }

它不应该放在后面 .authorizeRequests() 但是在第一个匹配器上有一个海峡。

相关问题