“连接”;“微服务网关”;加上;UAA服务器“;Jhipster 3.5.0

“连接”;“微服务网关”;加上;UAA服务器“;Jhipster 3.5.0,jhipster,microservices,Jhipster,Microservices,我创建了一个UAA服务器: ? (1/16) Which *type* of application would you like to create? [BETA] JHipster UAA server (for microservice OAuth2 authentication) 我创建了一个MicroService网关: ? (1/16) Which *type* of application would you like to create? Microservice gatewa

我创建了一个UAA服务器:

? (1/16) Which *type* of application would you like to create? [BETA] JHipster UAA server (for microservice OAuth2 authentication)
我创建了一个MicroService网关:

? (1/16) Which *type* of application would you like to create? Microservice gateway
...
? (6/16) What is the folder path of your UAA application?. ../elseruaa
  • 我在“docker compose”中创建了docker容器,并且创建得很好
  • 我必须在网关上添加一些额外的配置才能使用服务器UAA
  • 我在容器网关中获得以下错误跟踪:

    org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration”的bean时出错:自动关联依赖项的注入失败;嵌套异常为org.springframework.beans.factory.BeanCreationException:无法自动连线方法:public void org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration.SetFilterChainProxy SecurityConfigure(org.springframework.security.config.annotation.ObjectPostProcessor,java.util.List)抛出java.lang.Exception;嵌套异常为org.springframework.beans.factory.BeanExpressionException:表达式解析失败;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfiguration”的bean时出错:自动连线依赖项的注入失败;嵌套异常为org.springframework.beans.factory.BeanCreationException:无法自动关联字段:private org.springframework.security.oauth2.provider.token.TokenStore org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfiguration.TokenStore;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“tokenStore”的bean时出错,该bean在类路径资源[com/abalia/elser/config/MicroserviceSecurityConfiguration.class]:通过工厂方法实例化bean失败;嵌套异常为org.springframework.beans.beanstantiationException:未能实例化[org.springframework.security.oauth2.provider.token.TokenStore]:工厂方法“TokenStore”引发异常;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建在类路径资源[com/abalia/elser/config/MicroserviceSecurityConfiguration.class]中定义的名为“jwtAccessTokenConverter”的bean时出错:通过工厂方法实例化bean失败;嵌套异常为org.springframework.beans.beans实例化异常:未能实例化[org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter]:工厂方法“JwtAccessTokenConverter”引发异常;嵌套的异常是java.lang.IllegalStateException:没有可用于elseruaa的实例…


非常感谢您的帮助。

原因:java.lang.IllegalStateException:RibbonLoadBalancerClient报告没有可用于elseruaa的实例


我不了解我们的uaa支持的最新情况,但您的网关似乎无法在已注册到JHipster注册表(Eureka服务器)的Eureka客户端列表中找到名为
elseruaa
的服务。所以要么你忘了启动elseruaa,要么用另一个名字注册了它。

我也有同样的问题。花费数小时后,通过在MicroserviceSecurityConfiguration.java中添加以下内容,最终修复了错误:

注入org.springframework.cloud.client.DiscoveryClient

 @Inject
private DiscoveryClient discoveryClient;
在MicroserviceSecurityConfiguration.java的任何方法中(我选择getKeyFromAuthorizationServer方法),添加以下内容:

discoveryClient.getServices();

我创建了一个youtube屏幕广播来展示如何使用UAA创建jhipster(3.5.1)微服务。我相信您所面临的问题与服务的启动顺序有关,或者旧服务没有使用3.5.0+代码重新生成。正如您在屏幕广播和github上的源代码中所看到的,它按原样工作


更改您的手机安全配置

@Inject
private DiscoveryClient discoveryClient;

private String getKeyFromAuthorizationServer() {
          List<String> services = discoveryClient.getServices();

          HttpEntity<Void> request = new HttpEntity<Void>(new HttpHeaders());
          String value = (String) this.keyUriRestTemplate
              .exchange("http://uaa/oauth/token_key", HttpMethod.GET, request, Map.class).getBody()
              .get("value");

          return value;
      }
@Inject
私人发现客户发现客户;
私有字符串getKeyFromAuthorizationServer(){
List services=discoveryClient.getServices();
HttpEntity请求=新的HttpEntity(新的HttpHeaders());
字符串值=(字符串)this.keyurirestemplate
.交换(”http://uaa/oauth/token_key,HttpMethod.GET,请求,Map.class).getBody()
.获取(“价值”);
返回值;
}
所以基本上有一行:

List<String> services = discoveryClient.getServices();
List services=discoveryClient.getServices();

解决该问题。

堆栈跟踪的结尾在哪里?您似乎在根本原因异常之前截断了它。请参阅,uaa服务器支持处于测试阶段,可能无法与docker composeThank一起使用。非常感谢您的帮助。最初,您不需要额外的配置来显示UAA和网关。不是吗?我在3.5.0中也遇到了同样的问题。您是否查看了注册表仪表板以查看uaa服务器是否已注册?我认为@GaëlMarziou是正确的。UAA需要在资源服务器(或“微服务”)之前运行并在jhipster注册表中注册,因为资源服务器向运行中的UAA请求验证JWTs所需的公钥。因为这个顺序,一个简单的“docker compose up”将不起作用。您可能需要创建一个脚本,对初创企业进行排序,如:(注意,这个示例项目不是jhipster项目)。另外:是的,这很正常,但即使我在尝试将网关连接到uaa时得到了npe,我也不使用docker。Jhipster 3.4.2上的一切都正常。自3.4.2以来,网关、uaa和微服务wrt uaa都有变化,您升级了所有这些吗?将
@enablescoveryclient
添加到应用程序(.java)和
initApplication
方法中的
DiscoveryClient
不是更好吗?或者,我们是否需要在每次想要获取密钥以获取更新列表时调用此函数。