Java Spring引导OAuth Ressource服务器代理配置

Java Spring引导OAuth Ressource服务器代理配置,java,spring,spring-boot,spring-security-oauth2,spring-reactive,Java,Spring,Spring Boot,Spring Security Oauth2,Spring Reactive,我目前正在努力将代理与SpringWebFlux结合使用。在其他服务中,我始终遵循这种方法,这种方法非常有效(从标准环境变量检索代理配置): 但是现在我正试图使用Spring OAuth资源服务器包来设置OAuth Ressource服务器。此包使用SpringWebFlux for HTTP。该服务现在尝试从给定uri(需要代理)获取jwk集,但由于连接被拒绝错误而失败。有人将Spring Webflux/OAuth Ressource和代理结合起来工作了吗?我自己发现,为NimbusReac

我目前正在努力将代理与SpringWebFlux结合使用。在其他服务中,我始终遵循这种方法,这种方法非常有效(从标准环境变量检索代理配置):


但是现在我正试图使用Spring OAuth资源服务器包来设置OAuth Ressource服务器。此包使用SpringWebFlux for HTTP。该服务现在尝试从给定uri(需要代理)获取jwk集,但由于连接被拒绝错误而失败。有人将Spring Webflux/OAuth Ressource和代理结合起来工作了吗?

我自己发现,为NimbusReactiveJwtDecoder bean提供正确配置的webclient解决了这个问题

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
import org.springframework.security.oauth2.jwt.NimbusReactiveJwtDecoder;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.netty.http.client.HttpClient;
import reactor.netty.tcp.ProxyProvider;

@Data
@Component
@Configuration
@ConfigurationProperties(value = "proxy")
public class ProxyConfig {

  private String host;
  private int port;
  private String username;
  private String password;

  @Value("${spring.security.oauth2.resourceserver.jwt.jwk-set-uri}")
  private String jwkSetUri;

  @Bean
  public WebClient webClient(ReactorClientHttpConnector reactorClientHttpConnector) {
    return WebClient.builder().clientConnector(reactorClientHttpConnector).build();
  }

  @Bean
  public HttpClient httpClient() {
    return HttpClient.create()
        .tcpConfiguration(tcpClient ->
            tcpClient.proxy(
                proxy -> proxy.type(ProxyProvider.Proxy.HTTP).host(host)
                    .port(port).username(username)
                    .password(s -> password)));
  }

  @Bean
  ReactorClientHttpConnector reactorClientHttpConnector(HttpClient httpClient) {
    return new ReactorClientHttpConnector(httpClient);
  }

  @Bean
  public NimbusReactiveJwtDecoder nimbusReactiveJwtDecoder(WebClient webClient) {
    return NimbusReactiveJwtDecoder
        .withJwkSetUri(jwkSetUri)
        .webClient(webClient).build();
  }
}
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
import org.springframework.security.oauth2.jwt.NimbusReactiveJwtDecoder;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.netty.http.client.HttpClient;
import reactor.netty.tcp.ProxyProvider;

@Data
@Component
@Configuration
@ConfigurationProperties(value = "proxy")
public class ProxyConfig {

  private String host;
  private int port;
  private String username;
  private String password;

  @Value("${spring.security.oauth2.resourceserver.jwt.jwk-set-uri}")
  private String jwkSetUri;

  @Bean
  public WebClient webClient(ReactorClientHttpConnector reactorClientHttpConnector) {
    return WebClient.builder().clientConnector(reactorClientHttpConnector).build();
  }

  @Bean
  public HttpClient httpClient() {
    return HttpClient.create()
        .tcpConfiguration(tcpClient ->
            tcpClient.proxy(
                proxy -> proxy.type(ProxyProvider.Proxy.HTTP).host(host)
                    .port(port).username(username)
                    .password(s -> password)));
  }

  @Bean
  ReactorClientHttpConnector reactorClientHttpConnector(HttpClient httpClient) {
    return new ReactorClientHttpConnector(httpClient);
  }

  @Bean
  public NimbusReactiveJwtDecoder nimbusReactiveJwtDecoder(WebClient webClient) {
    return NimbusReactiveJwtDecoder
        .withJwkSetUri(jwkSetUri)
        .webClient(webClient).build();
  }
}