首页 > 解决方案 > 从其他外部 Spring Boot 应用程序调用 api

问题描述

我有两个不同的 springboot 应用程序。每个都使用 UsernameAndPasswordAuthentication 机制和 JWT 启用了 spring 安全性。我需要从另一个应用程序 api 中调用其中一个,但我不需要用户验证用户名和密码,因为这两个应用程序将有不同的用户,如果授权标头包含有效的 JWT 令牌,则每个请求都将被授权。我需要的是,如果从外部应用程序调用的 api 应该检查授权标头是否具有“基本 someAccessToken”。是否有可能进行这种实现。

标签: javaspringspring-bootspring-security

解决方案


有可能:调用在 http 标头上设置 JWT 令牌authorization(使用 Bearer 模式,这是普遍接受的做法)

HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Bearer " + jwtToken);

MyDto dto = new MyDto();
HttpEntity<MyDto> requestEntity = new HttpEntity<>(dto, headers);

ResponseEntity resp =
            new RestTemplate().exchange("http://localhost:8080/rest/service",
                    HttpMethod.POST, requestEntity, String.class);

在服务端获取令牌并验证访问:

public ResponseEntity<String> create(@RequestBody MyDto dto, @RequestHeader("authorization") String authorization) throws Exception {

    System.out.println("authorization: " + authorization);

推荐阅读