我们有一个如下配置:

@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命中端点时才应用verifyingProcessingFilterapi/**/*

现在,我们必须在过滤器内部添加一个AntMatching检查,以便仅将其应用于正确的请求,但我认为应该只可以将其添加到匹配的请求中。

有人可以提供一个示例,说明如何向一个特定的“ Ant 匹配”路径请求添加过滤器吗?

最佳答案

看起来您无法使用单个Configuration类来做到这一点。看一下这个问题:How to apply spring security filter only on secured endpoints?

在这种情况下,我认为更好的解决方案是配置多个HttpSecurity。从Spring IO documentation:



该文档有一个完整的示例,其中包含完成此操作的必要步骤:



祝你好运!

08-27 06:09