java - 如何在Java Spring Boot中从请求 header 获取承载 token ?

标签 java spring-boot bearer-token spring-cloud-feign

嗨,您要实现的目标是获取Java Spring 启动RESTApi Controller 中从前端提交的承载 token ,并使用伪装客户端向另一个微服务发出另一个请求?这是我的工作
enter image description here
上图是我如何处理 postman 的请求,这是我的 Controller 代码:

@Operation(summary = "Save new")
@PostMapping("/store")
public ResponseEntity<ResponseRequest<TransDeliveryPlanning>> saveNewTransDeliveryPlanning(
        @Valid @RequestBody InputRequest<TransDeliveryPlanningDto> request) {

    TransDeliveryPlanning newTransDeliveryPlanning = transDeliveryPlanningService.save(request);

    ResponseRequest<TransDeliveryPlanning> response = new ResponseRequest<TransDeliveryPlanning>();

    if (newTransDeliveryPlanning != null) {
        response.setMessage(PESAN_SIMPAN_BERHASIL);
        response.setData(newTransDeliveryPlanning);
    } else {
        response.setMessage(PESAN_SIMPAN_GAGAL);
    }

    return ResponseEntity.ok(response);
}
这是我的服务样子:
public TransDeliveryPlanning save(InputRequest<TransDeliveryPlanningDto> request) {
       Future<List<PartnerDto>> initPartners = execs.submit(getDataFromAccount(transDeliveryPlanningDtSoDtoPartnerIdsSets));

}

public Callable<List<PartnerDto>> getDataFromAccount(Set<Long> ids) {

    String tokenString = "i should get the token from postman, how do i get it to here?";
    List<PartnerDto> partnerDtoResponse = accountFeignClient.getData("Bearer " + tokenString, ids);
    
    return () -> partnerDtoResponse;
}
如您所见,在“tokenString”中,我放置了一个我所质疑的字符串,我如何从 postman 那里将其传送到那里?

最佳答案

尽管建议的答案有效,但每次将 token 传递给FeignClient调用仍不是最佳方法。
我建议为假请求创建一个拦截器,然后可以从RequestContextHolder中提取 token 并将其直接添加到请求 header 中。
像这样:

    @Component
    public class FeignClientInterceptor implements RequestInterceptor {
    
      private static final String AUTHORIZATION_HEADER = "Authorization";

      public static String getBearerTokenHeader() {
        return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getHeader("Authorization");
      }
    
      @Override
      public void apply(RequestTemplate requestTemplate) {

          requestTemplate.header(AUTHORIZATION_HEADER, getBearerTokenHeader());
       
      }
    }
这样,您就可以解决问题

关于java - 如何在Java Spring Boot中从请求 header 获取承载 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65019801/

相关文章:

仅使用不记名 token 的 Python gRPC 客户端请求

java - 使用 GWT 拖放文件上传

java - 如何修复 "No ModelAndView found"失败的测试?

css - Thymeleaf - 将类名的一部分添加到 classappend

asp.net-mvc - 从 MVC Controller 调用 Web API(cookie 身份验证)

c# - ASP.Net Core 的自定义不记名 token 授权

java - 这段代码中输入值没有增加,函数用 0 值调用自身?

java - 从 Java 远程登录

Java:没有监视器的Thread.stop线程

maven - 启动 spring boot "An attempt was made to call a method that does not exist"时出错