Spring微服务使用feign传递Token的简单示例
程序员文章站
2022-04-15 12:39:27
Spring微服务之间使用feign的RequestInterceptor拦截器实现请求头传递当前登录用户信息,代码实现逻辑:消费者Consumer微服务调用提供者Provider微服务,通过feign拦截器将请求头信息传递给提供者服务。...
Spring微服务之间使用feign的RequestInterceptor拦截器实现请求头传递当前登录用户信息,代码实现逻辑:消费者Consumer微服务调用提供者Provider微服务,通过feign拦截器将请求头信息传递给提供者服务。本文是在Spring微服务间登录用户信息共享思路和Spring boot集成Nacos服务注册中心及发现与消费基础上的简单代码实现。
一、提供者服务
在HelloController类中新增testHeader方法:获取header传递的Access-Token参数
@RequestMapping("/testHeader")
public String testHeader(@RequestHeader HttpHeaders headers){
String token = "";
List<String> tokenList = headers.get("Access-Token");
if(tokenList.size()==1) {
token = tokenList.get(0);
System.out.println("Access-Token is "+token);
}
return String.format("Hello, the head messge [%s] come from %s, port is %s!", token, applicationName, serverPort);
}
通过postman访问服务正常,如下:
二、消费者服务
通过feign拦截器实现将消费者请求头信息传递给提供者服务。
1、新增FeignConfig类
@Configuration
public class FeignConfig implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
System.out.println("FeignConfig - apply");
ServletRequestAttributes attributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());
if (attributes != null) {
HttpServletRequest request = attributes.getRequest();
requestTemplate.header("Access-Token", request.getHeader("Access-Token"));
System.out.println("FeignConfig - Access-Token: "+request.getHeader("Access-Token"));
}
}
}
2、ConsumerController新增test方法
@RequestMapping("/test-customer")
public String test() {
String result = hfc.testHeader();
System.out.println("ConsumerController.test(): "+result);
return "this is FeignResult:" + result;
}
3、HelloFeignClient新增testHeader方法
@FeignClient("provide-nacos-service")
public interface HelloFeignClient {
@RequestMapping("/hello")
String helloWorld();
@RequestMapping("/testHeader")
String testHeader();
}
三、运行结果
postman:
消费者服务控制台:
提供者服务控制台:
本文地址:https://blog.csdn.net/weixin_44153121/article/details/110792341