【发布时间】:2020-07-06 22:37:31
【问题描述】:
我的应用程序有几个微服务,包括:Auth、Game 和 Group。 当我按下前端(播放)上的按钮时,我正在调用 Group rest api 方法,比如说 foo()。 为了在 Group 中实现 foo(),我需要 GET 调用 Game rest api,但它是安全的。
当我登录 React 应用程序时,我从 /login (Auth) 获取 JWT 令牌并将其存储在本地存储中。然后我成功地使用它从 Group 调用 foo() 但在 foo() 实现中我还需要使用 jwt 令牌才能从 Game 中获取信息。
@Configuration
//+component scans...
public class GroupConfiguration {
@Bean
@LoadBalanced
public WebClient.Builder buildWebClientBuilder() {
return WebClient.builder();
}
}
@RestController
@RequestMapping("/groups")
public class Controller {
private final Logger logger = LogManager.getLogger();
@Autowired
private WebClient.Builder webClientBuilder;
private int getMinimumNumberOfPlayers(int gameId) {
try {
return webClientBuilder.build()
.get()
.uri("http://game-service/games/minimumNumberOfPlayers/2")
.retrieve()
.bodyToMono(Integer.class)
.block();
} catch (NullPointerException|WebClientResponseException e) {
e.printStackTrace();
return 0;
}
}
...
// foo() frontend calls foo(). foo it's using getMinimumNumberOfPlayers
getMinimumNumberOfPlayers() 用于 Group 的 foo() 方法。它应该通过 id 检索游戏的最少玩家数量,但游戏微服务是 jwt 安全的,我得到一个未经授权的错误。
所以我的问题是如何让 Group 微服务能够调用 Game 微服务。
谢谢。
编辑:RestTemplate Interceptor 我就是这样解决的。
【问题讨论】:
-
这通常不是您实现系统到系统通信的方式。例如,Oauth 对用户到系统和系统到系统的通信有不同的流程。
标签: java spring spring-boot jwt microservices