不同路径匹配器的多httpsecurity

yk9xbfzb  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(330)

在我当前的系统中,我们使用下面提到的spring security gateway的功能。

http
   .csrf().disable()
   .exceptionHandling().and()
   .httpBasic().disable()

但是现在我想构建一个新的端点,它将使用httpbasic安全性,那么如何使用pathmatcher来管理这些东西呢?
如果我们想对httpbasic禁用或httpbasic启用使用不同的配置方法。那么,它将如何为我工作?
当我在同一个类中使用两个过滤器时,我将得到以下错误。。
说明:
无法注册在类路径资源[org/springframework/security/config/annotation/web/configuration/websecurityconfiguration.class]中定义的bean“conversionservicepostprocessor”。已在类路径资源[org/springframework/security/config/annotation/web/reactive/webfluxsecurityconfiguration.class]中定义了具有该名称的bean,并且已禁用重写。
行动:
考虑重命名bean中的一个,或者通过设置Spring。

j91ykkif

j91ykkif1#

spring安全文档中有一些例子说明了如何做到这一点。
我想你可以这样做:

@Configuration
@EnableWebFluxSecurity
static class MultiSecurityHttpConfig {

    @Order(Ordered.HIGHEST_PRECEDENCE)                                                      
    @Bean
    SecurityWebFilterChain yourEndpointHttpSecurity(ServerHttpSecurity http) {
        http
            .securityMatcher(new PathPatternParserServerWebExchangeMatcher("/your-endpoint/**"))      
            .authorizeExchange((exchanges) -> exchanges
                .anyExchange().authenticated()
            )
            .httpBasic(withDefaults());                         
        return http.build();
    }

    @Bean
    SecurityWebFilterChain webHttpSecurity(ServerHttpSecurity http) {                       
        http
            .csrf().disable()
            .exceptionHandling().and()
            .httpBasic().disable()                                                  
        return http.build();
    }

}

这样首先你的 yourEndpointHttpSecurity 如果路径匹配,将对bean进行求值 /your-endpoint/** 然后是你的默认值 webHttpSecurity

相关问题