在 Zuul 网关代理时无法获取 spring.config.import 主机

问题描述 投票:0回答:0

解释问题

你好,我在端口 8080 上用 zuul 创建了一个反向代理网关

我有在端口 8090 上运行的服务注册表,其中包含每个其他服务的 keycloak 配置,可以使用 spring.config.import 获取。

我试图通过端口 8080 更改配置,即:“http://localhost:8080/auth/realms/aip-realm”(zuul 网关的端口)。因为我想用 zuul 端口集中 oauth 服务器端口(在 8099 上运行)。这意味着我们应该看到 Oauth2 服务器(8099)的每个请求和用户界面都可见端口 8080

我在application.yml中配置zuul:

zuul: 
  routes: 
    auth: 
      path: /auth/** 
      url: http://localhost:8099/auth 
      sensitive-headers:

spring: 
  config:
   import: 
     configserver:http://localhost:8088/api 
  main: 
   web-application-type: reactive

ribbon: eureka: enabled:false

然后我尝试使用 webflux ServerHttpSecurity 添加网络配置

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http,
                                                            ReactiveClientRegistrationRepository clientRegistrationRepository) {
        // Authenticate through configured OpenID Provider
        http.oauth2Login();
        // Also logout at the OpenID Connect provider
        http.logout(logout -> logout.logoutSuccessHandler(oidcLogoutSuccessHandler(clientRegistrationRepository)));
        ...
    }
}

问题似乎是端口 8080 未激活然后我收到消息:

org.springframework.beans.factory.UnsatisfiedDependencyException:在类路径资源 [com/castsoftware/gateway/SecurityConfig.class] 中定义名称为“springSecurityFilterChain”的 bean 创建时出错:通过方法“springSecurityFilterChain”参数 0 表示的不满足依赖关系;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.security.config.annotation.web.reactive.ServerHttpSecurityConfiguration': Unsatisfied dependency expressed through method 'setAdapterRegistry' parameter 0;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为“org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration$EnableWebFluxConfiguration”的 bean 时出错:通过方法“setConfigurers”参数 0 表达的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为“org.springframework.security.config.annotation.web.reactive.ReactiveOAuth2ClientImportSelector$OAuth2ClientWebFluxSecurityConfiguration”的 bean 时出错:通过方法“setClientRegistrationRepository”参数 0 表达的不满足依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCreationException:在类路径资源 [org/springframework/boot/autoconfigure/security/oauth2/client/reactive/ReactiveOAuth2ClientConfigurations$ReactiveClientRegistrationRepositoryConfiguration.class] 中定义名称为“clientRegistrationRepository”的 bean 创建时出错:通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [org.springframework.security.oauth2.client.registration.InMemoryReactiveClientRegistrationRepository]:工厂方法 'clientRegistrationRepository' 抛出异常;嵌套异常是 java.lang.IllegalArgumentException:无法使用提供的“http://localhost:8080/auth/realms/aip-realm”Issuer 解析配置

我怀疑 bean 顺序,或者当 clientRegistrationRepository 尝试 fecth 8080 而不是代理到 8099 真正的 oauth2 服务器时,路由代理仍然不工作。

预期结果:

我正在尝试使用 oauth2 SSO keycloak webflux security 使 zuul 反向代理工作。

预期的结果是,当我访问“/”时,它应该重定向到代理 oauth2 服务器的端口 8080 上的“/auth/realms/aip-realm”。

spring-security oauth-2.0 spring-cloud netflix-zuul spring-cloud-gateway
© www.soinside.com 2019 - 2024. All rights reserved.