我有一个Reactive Sping Boot 应用程序,它负责将请求路由到下游服务,使用Spring Cloud Gateway(即它是API网关)。应用程序有一些执行器端点,需要保护,因此我想使用一个简单的安全性,比如基本的auth。
我想配置这个应用程序,要求对/actuator/refresh
的请求使用基本的auth进行授权(使用配置的Spring安全用户和密码)。所有对其他端点的请求,即使它们包含基本身份验证,也只需要传递给下游服务。
我当前的Spring安全配置:
@Bean
@Order(1)
SecurityWebFilterChain securityWebFilterChain(final ServerHttpSecurity http) {
http.authorizeExchange(exchanges -> {
exchanges.matchers(EndpointRequest.toAnyEndpoint().excluding(HealthEndpoint.class, InfoEndpoint.class)).hasRole("ACTUATOR"); // requires Http Basic Auth
});
http.httpBasic(withDefaults()); // if not enabled, you cannot get the ACTUATOR role
return http.build();
}
@Bean
@Order(2)
SecurityWebFilterChain permitAllWebFilterChain(final ServerHttpSecurity http) {
http.authorizeExchange(exchanges -> exchanges.anyExchange().permitAll()); // allow unauthenticated access to any endpoint (other than secured actuator endpoints?)
http.httpBasic(ServerHttpSecurity.HttpBasicSpec::disable); // disable Http Basic Auth for all other endpoints
return http.build();
}
API网关不会传播针对下游服务的请求。在此设置中,spring Boot 服务返回401,而200是预期/必需的。
任何想法为什么这个配置不工作/它应该如何配置,否则?
2条答案
按热度按时间fcg9iug31#
我不知道是什么坏了,但你有没有尝试结合他们,只有一个过滤器?
另一个好处是启用调试日志记录并查看失败的部分。
这是通过在
application.properties
中定义cs7cruho2#
来自文档:
Spring Cloud Gateway构建在Sping Boot 、Spring WebFlux和Project Reactor之上。因此,许多熟悉的同步库(例如Spring Data和Spring Security)和模式在使用Spring Cloud Gateway时可能不适用。如果您不熟悉这些项目,我们建议您开始阅读它们的文档,以便在使用Spring Cloud Gateway之前熟悉一些新概念。
这是到文档Spring Cloud的链接,我有同样的问题,我无法解决-这可能与我提到的文档有关。我希望这会有所帮助。