Java 从Jhipster UAA到microservice gateway应用程序的假客户端
我的网关(gw应用程序)应用程序中有一个联系人实体,我希望每次在UAA应用程序中注册新用户时都创建一个条目。我一直在尝试使用Jhipster文档中描述的微服务Java 从Jhipster UAA到microservice gateway应用程序的假客户端,java,spring-boot,jhipster,jhipster-registry,Java,Spring Boot,Jhipster,Jhipster Registry,我的网关(gw应用程序)应用程序中有一个联系人实体,我希望每次在UAA应用程序中注册新用户时都创建一个条目。我一直在尝试使用Jhipster文档中描述的微服务 我遇到的第一个问题是,我在UAA应用程序中没有这个接口@AuthorizedFeignClient 其次,我从未使用@FeignClient成功创建过从uaa到gw的应用程序 除了与外部客户机存在通信/配置问题外,我还担心在没有建立会话(新用户注册)的情况下这将如何工作,然后我还有另一个用例,其中我在用户管理屏幕上有一个现有会话(管理
- 我遇到的第一个问题是,我在UAA应用程序中没有这个接口
@AuthorizedFeignClient
- 其次,我从未使用
成功创建过从uaa到gw的应用程序@FeignClient
{
"generator-jhipster": {
"promptValues": {
"packageName": "com.uaa.auth",
"nativeLanguage": "es"
},
"jhipsterVersion": "4.13.3",
"baseName": "UAA",
"packageName": "com.agriket.auth",
"packageFolder": "com/uaa/auth",
"serverPort": "9999",
"authenticationType": "uaa",
"cacheProvider": "hazelcast",
"enableHibernateCache": true,
"websocket": false,
"databaseType": "sql",
"devDatabaseType": "mysql",
"prodDatabaseType": "mysql",
"searchEngine": "elasticsearch",
"messageBroker": false,
"serviceDiscoveryType": "eureka",
"buildTool": "gradle",
"enableSocialSignIn": false,
"enableSwaggerCodegen": false,
"jwtSecretKey": "8e4167f67e9f8d85cc35b70181a828c691374e58",
"enableTranslation": true,
"applicationType": "uaa",
"testFrameworks": [],
"jhiPrefix": "jhi",
"nativeLanguage": "es",
"languages": [
"es",
"en"
],
"clientPackageManager": "yarn",
"skipClient": true
}
}
网关应用程序配置
{
"generator-jhipster": {
"promptValues": {
"packageName": "com.app.gw",
"nativeLanguage": "es"
},
"jhipsterVersion": "4.13.3",
"baseName": "gwApp",
"packageName": "com.agriket.chat",
"packageFolder": "com/app/gw",
"serverPort": "9085",
"authenticationType": "uaa",
"uaaBaseName": "UAA",
"cacheProvider": "hazelcast",
"enableHibernateCache": true,
"websocket": "spring-websocket",
"databaseType": "sql",
"devDatabaseType": "mysql",
"prodDatabaseType": "mysql",
"searchEngine": "elasticsearch",
"messageBroker": false,
"serviceDiscoveryType": "eureka",
"buildTool": "gradle",
"enableSocialSignIn": false,
"enableSwaggerCodegen": false,
"clientFramework": "angularX",
"useSass": false,
"clientPackageManager": "yarn",
"applicationType": "gateway",
"testFrameworks": [],
"jhiPrefix": "jhi",
"enableTranslation": true,
"nativeLanguage": "es",
"languages": [
"es",
"en"
]
}
}
客户端代码
package com.uaa.auth.service.restClient;
import com.uaa.auth.service.restClient.Contact;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.*;
@FeignClient(name = "gwApp")
@RequestMapping("/api")
public interface ContactClient {
@PostMapping("/contacts")
Contact createContact(@RequestBody Contact contact);
@GetMapping("/contacts/{id}")
Contact getContact(@PathVariable(name = "id") Long id);
}
接触
public class Contact {
private Long id;
private String login;
private String firstName;
private String lastName;
public Contact(User user) {
this.id = user.getId();
this.firstName = user.getFirstName();
this.lastName = user.getLastName();
}
public Long getId() {
return id;
}
public String getLogin() {
return login;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
要在您的项目中包含Feign,请将starter与group
org.springframework.cloud
和工件idspringcloudstarteropenfeign
一起使用
我认为伪客户端最适合微服务之间的服务间通信,而不是网关和微服务之间的通信。希望这对你有帮助
我遇到了一个类似的问题,通过简单地将客户端包从microservice复制到UAA服务器,并对application-dev.yml做一些小的更改,就解决了这个问题。请参阅链接抱歉,回答太晚。首先谈谈你对会议的关注。会话是处理cookie的有状态身份验证中最常用的术语。在我们的JWT世界中,您可以认为会话只是访问令牌过期之前的持续时间 但是,在您的用例中,网关应用程序应该“作为服务登录”,或者更准确地说:使用客户端凭据流作为内部OAuth2客户端进行身份验证。这可以在您的UAA中使用此配置插件完成:
jhipster:
...
security:
client-authorization:
access-token-uri: uaa/oauth/token
token-service-id: uaa
client-id: internal
client-secret: internal
并使用@AuthorizedFeignCleint
。如果你想知道,是的,在这种情况下,UAA确实给自己打了一个电话,这有点奇怪,但它是有效的。(至少,对于OAuth来说,这是正确的方法)
因此,您将有一个会话用于此合理的写入操作。如果没有经过身份验证的用户,您会感到困惑。有了客户端凭据授权,就根本不需要用户,因为您可以保护服务到服务的调用,而不是用户到服务的调用