我如何得到一个弹簧云网关式窗口来触发与断路器的后备路线?

问题描述 投票:0回答:1
我有一个我需要连接断路器的OAuth2令牌网关滤波器。如果我无法连接到提供商或身份验证失败,我需要使用后备路由。

我的过滤器如下:

import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; import org.springframework.http.HttpHeaders; import org.springframework.security.oauth2.client.OAuth2AuthorizeRequest; import org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientManager; import org.springframework.stereotype.Component; @Component public class Oauth2GatewayFilterFactory extends AbstractGatewayFilterFactory<Oauth2GatewayFilterFactory.Config> { private final ReactiveOAuth2AuthorizedClientManager authorizedClientManager; public Oauth2GatewayFilterFactory( ReactiveOAuth2AuthorizedClientManager authorizedClientManager) { super(Config.class); this.authorizedClientManager = authorizedClientManager; } @Override public GatewayFilter apply(Config config) { return (exchange, chain) -> { final var clientRegistrationId = config.getClientRegistrationId(); final var oauth2Request = OAuth2AuthorizeRequest.withClientRegistrationId(clientRegistrationId) .principal("N/A") .build(); return authorizedClientManager.authorize(oauth2Request) .map(authorizedClient -> exchange.mutate() .request(r -> r.headers( headers -> headers.set(HttpHeaders.AUTHORIZATION, "Bearer " + authorizedClient.getAccessToken().getTokenValue()))) .build()) .defaultIfEmpty(exchange) .flatMap(chain::filter); }; } public static class Config { private String clientRegistrationId; public String getClientRegistrationId() { return clientRegistrationId; } public void setClientRegistrationId(String clientRegistrationId) { this.clientRegistrationId = clientRegistrationId; } } }

我试图将断路器接线到过滤器工厂,然后进行
transformDeferred

return authorizedClientManager.authorize(oauth2Request)
        .transformDeferred(CircuitBreakerOperator.of(circuitBreaker))
        .map(authorizedClient -> {

但这对我没有帮助。
我如何在断路器中连接?

我通过使用这样的模式在没有断路器的情况下解决了它:

spring-cloud-gateway circuit-breaker resilience4j spring-cloud-circuitbreaker
1个回答
0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.