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

Spring boot spring boot从请求中获取承载令牌并调用另一个微服务,spring-boot,microservices,Spring Boot,Microservices,我有一个spring boot微服务,它充当网关,需要从请求中获取授权头,将其附加到新请求,并将请求传递给另一个微服务。我目前正在做下面的工作,它的工作,但不知道是否有更好的方式来做它 @GetMapping public List<Task> getTasks(HttpServletRequest request, HttpServletResponse httpresponse) { String bearerToken = request.getHeader("Aut

我有一个spring boot微服务,它充当网关,需要从请求中获取授权头,将其附加到新请求,并将请求传递给另一个微服务。我目前正在做下面的工作,它的工作,但不知道是否有更好的方式来做它

@GetMapping
public List<Task> getTasks(HttpServletRequest request, HttpServletResponse httpresponse) {

    String bearerToken = request.getHeader("Authorization");

    HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.set("Authorization", bearerToken);

    HttpEntity<String> httpEntity = new HttpEntity <String> (httpHeaders);

    String getTasksURL = "http://localhost:8082/tasks";
    ResponseEntity<List<Task>> response = restTemplate.exchange(
            getTasksURL,
            HttpMethod.GET,
            httpEntity,
            new ParameterizedTypeReference<List<Task>>(){});
    List<Task> taskslist = response.getBody();
    return taskslist;
}
@GetMapping
公共列表getTasks(HttpServletRequest请求,HttpServletResponse httpresponse){
String bearerToken=request.getHeader(“授权”);
HttpHeaders HttpHeaders=新的HttpHeaders();
httpHeaders.set(“授权”,bearerToken);
HttpEntity HttpEntity=新的HttpEntity(httpHeaders);
字符串getTasksURL=”http://localhost:8082/tasks";
ResponseEntity response=restemplate.exchange(
getTasksURL,
HttpMethod.GET,
httpEntity,
新的ParameteredTypeReference(){});
List taskslist=response.getBody();
返回任务列表;
}

如果有使用jwt的代码示例,请提供链接。大多数代码示例仅显示单个微服务中jwt的配置,但没有看到最终调用另一个微服务、来回传递令牌的项目,我看不出您这样做有任何错误。但是,如果您正在实现一个只传递请求的网关(可能有一些速率限制或安全性,但不是真正的业务逻辑),我建议您签出—Zuul代理部分。只需几个类和总共<200行代码(包括配置),就可以创建一个完全工作的API网关。真不错

最好使用zuul代理作为网关。但请记住,默认情况下,它不会将您的授权头转发给外部服务。如果您想这样做,那么只需一行配置即可。你可以看看
也许最好将处理授权的代码封装在一个单独的拦截器中。这样,您的代码变得更简单、更清晰

这样的拦截器可能看起来像:

class RestTemplateHeaderModifierInterceptor implements  ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(
  HttpRequest request, 
  byte[] body, 
  ClientHttpRequestExecution execution) throws IOException {
    // Set your new Header here...
    // ...
    ClientHttpResponse response = execution.execute(request, body);
    return response;
}}
现在,您必须在创建restTemplate期间将此拦截器添加到restTemplate中

@Bean
public RestTemplate restTemplate() {
    RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory());
    restTemplate.setInterceptors(Collections.singletonList(new RestTemplateHeaderModifierInterceptor()));
    return restTemplate;
}

这是什么意思?使用Spring Boot有很多方法。我不知道所有的方法,所以我想知道是否有更好的方法。但是在这个代码中,你从哪里获得承载令牌??