Spring微服务使用feign传递Token的简单示例
Spring微服务之间使用feign的RequestInterceptor拦截器实现请求头传递当前登录用户信息,代码实现逻辑:消费者Consumer微服务调用提供者Provider微服务,通过feign拦截器将请求头信息传递给提供者服务。本文是在和基础上的简单代码实现。
一、提供者服务
在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: 消费者服务控制台: 提供者服务控制台:
上一篇:
IDEA上Java项目控制台中文乱码