spring-security 禁用子域的Spring安全性

hgncfbus  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(196)

我有一个可以通过不同类型的域访问的应用程序
请访问example.com
例如
www.test.example.com
www.npc.example.com
www.train.example.com
在配置Spring Security (authentication/oauth)时,我希望只为某些子域启用安全性,而为其他子域禁用安全性。
说只为“www.example.com“启用它www.test.example.com
这是我的过滤器配置-

@Bean
    fun securityWebFilterChain(
        http: ServerHttpSecurity
    ): SecurityWebFilterChain {
         return http.csrf().disable()
            .cors().configurationSource(corsConfigurationSource())
            .and()
            .authorizeExchange()
                .pathMatchers("/**")
               .authenticated()
            .and().httpBasic().and().oauth2Login { oauth2 ->
                        oauth2.authenticationSuccessHandler(oauthSuccessHandler)
                            .authorizedClientService(redisOauthClientService)
                    }
            .build()
    }

基本URL显示为另一个标头。是否有方法使用标头来启用/禁用安全配置?任何其他方法也可以。

nnt7mjpx

nnt7mjpx1#

您可以创建一个自定义的ServerWebExchangeMatcher实现来检查请求是否来自子域,并在DSL中使用它,类似于:

http
    .authorizeExchange()
        .matcher(new MySubdomainMatcher()).permitAll()
        .pathMatchers("/**").authenticated();

class MySubdomainMatcher implements ServerWebExchangeMatcher {

    public Mono<MatchResult> matches(ServerWebExchange exchange) {
        // perform the logic in the request
    }

}

相关问题