我的过滤器如下:
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 -> {
但这对我没有帮助。
我如何在断路器中连接?
我通过使用这样的模式在没有断路器的情况下解决了它: