如何在Java Spring Boot中从请求标头获取承载令牌?

凯文

嗨,您要实现的目标是获取Java春季启动RESTApi控制器中从前端提交的承载令牌,并使用伪装客户端向另一个微服务发出另一个请求?这是我的工作

在此处输入图片说明

上图是我如何处理邮递员的请求,这是我的控制器代码:

@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”中,我放置了一个我所质疑的字符串,我如何从邮递员那里将其传送到那里?

堆垛机

尽管建议的答案有效,但每次都将令牌传递给FeignClient呼叫仍然不是最好的方法。我建议为假请求创建一个拦截器,在那里您可以从中提取令牌RequestContextHolder并将其直接添加到请求标头中。像这样:

    @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());
       
      }
    }

这样,您就可以解决问题

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从标头(REST SDK)中检索承载令牌

Spring Boot从请求中获取承载令牌并调用另一个微服务

我如何记录HTTP请求的主机标头(Spring Boot)

如何通过Spring RestTemplate更改获取请求中的响应http标头?

Spring Boot + Zuul:如何从RESTful服务提供的文件流中获取“ Content-length”标头?

如何删除 Kafka(Spring-boot)中的标头?

如何在Spring RestTemplate请求上设置“ Accept:”标头?

如何在Spring MVC中基于http请求标头启用json的动态漂亮打印?

如何在Spring Boot中获取请求的URL

如何在Spring Boot中获取请求URL

如何在Spring Boot的每个请求中获取当前用户?

从Spring Boot应用程序的服务层中的请求获取标头

如何在Spring Boot中读取带有标头和正文的JSON

如何在Spring Boot中在index.html上设置cookie或标头

如何在Spring Boot中将Cache-Control标头添加到静态资源中?

Spring Boot + Swagger UI如何告诉端点要求承载令牌

Spring Boot Keycloak-如何验证承载令牌?

如何在Spring Integration Gateway中获取自定义标头值?

在Spring Boot中解析HTTP请求标头时出错

Spring Boot Controller应该如何处理“丢失”的请求标头?

如何在Node.js中获取标头请求

如何在soapUI中获取请求的HTTP标头信息?

如何在Rest WebService中获取请求标头值

如何在compojure请求中获取特定的HTTP标头

如何在Spring Boot中调试请求?

从 Angular 11 中的 Spring Boot 响应中获取标头

使用 Spring Boot 2 WebClient 从响应中获取标头

在向 spring-boot 发出 POST 请求时,如何在 java 方法中获取有效负载?

如何在Spring Java中编辑Pojo?