相关疑难解决方法(0)

Spring Security向除一个端点之外的所有端点添加过滤器

我对此进行了研究,并在 SO 上找到了这个答案

不过,我确实有一个补充问题:

我有一组过滤器,我希望将其应用于所有请求,特殊情况除外(例如:除 /mgmt/** 和 /error/** 之外的所有路径)。

这不能使用链接答案中提供的相同方法来完成,因为我会将过滤器添加到默认的 http-security 对象,然后该对象也适用于特殊情况。

是否有“负匹配器”之类的东西,允许我做类似的事情:

http.negativeAntMatchers("/mgmt/**).addFilter(...)
Run Code Online (Sandbox Code Playgroud)

为除 /mgmt/** 之外的所有内容添加过滤器?

我的代码:

这是“/mgmt”的配置,将 ManagementBasicAuthFilter 放置在链中 - 这有效,因为除了“/mgmt/**”之外没有端点要求基本身份验证。

@Order(1)
@Configuration
@RequiredArgsConstructor
public static class ManagementSecurityConfig extends WebSecurityConfigurerAdapter {

    private final AuthenticationManager authenticationManager;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
            http.antMatcher("mgmt/**")
                .csrf().disable()
                .headers().frameOptions().sameOrigin()
                .cacheControl().disable()
                .and()
                    .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                    .addFilterBefore(new ManagementBasicAuthenticationFilter(authenticationManager,
                        getAuthenticationEntryPoint(), "/mgmt"), BasicAuthenticationFilter.class)
                    .authorizeRequests()
                    .anyRequest()
                    .permitAll();
    }

    private BasicAuthenticationEntryPoint getAuthenticationEntryPoint() {
        BasicAuthenticationEntryPoint entryPoint = new BasicAuthenticationEntryPoint();
        entryPoint.setRealmName("myApp");
        return entryPoint;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是所有入口点的配置,除了 mgmt - …

spring spring-security spring-boot

3
推荐指数
1
解决办法
6641
查看次数

标签 统计

spring ×1

spring-boot ×1

spring-security ×1