🌺个人主页:杨永杰825_Spring,Mysql,多线程-CSDN博客
⭐每日一句:成为架构师路途遥远
📢欢迎大家:关注🔍+点赞👍+评论📝+收藏⭐️
目录
方法一 @RequestHeader
方法二 使用Feign的Interceptor
步骤二:配置Feign
通常微服务对于用户认证信息解析有两种方案
现在有一个从 A 服务调用 B 服务接口的内部调用业务场景,无论是哪种方案我们都需把 header 从 A 服务传递到 B 服务。
在请求调用方的微服务方法头中添加@RequestHeader用来接收用户端请求时传入的token
@RequestMapping("/deleteByOpenId") public Object deleteByOpenId(@RequestParam("opendId") String opendId, @RequestHeader("token") String token) { Object integer = appMpLoginAuthFeginClient.deleteByOpenId(opendId, token); return integer; }
这里获取到header中的“token”在采用Feign调用其他微服务时将获取到的Token传入到下一个微服务的请求头中
@RequestMapping("/rest/user-service/in/mpLoginAuth/deleteByOpenId") Object deleteByOpenId(@RequestParam("opendId") String opendId, @RequestHeader("token") String token);
这里的@RequestHeader的意思是将参数token放入到下个请求的请求头header中。
方法二 使用Feign的Interceptor
步骤一 实现RequestInterceptor接口
重写RequestInterceptor接口的apply,获取到token
public class TokenRequestIntecepor implements RequestInterceptor { @Override public void apply(RequestTemplate requestTemplate) { RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); ServletRequestAttributes srat = (ServletRequestAttributes) requestAttributes; HttpServletRequest request = srat.getRequest(); String token = request.getHeader("token"); if (StringUtils.isNotBlank(token)) { //将token传递出去 requestTemplate.header("token", token); } } } } } }
步骤二:配置Feign
application.yaml文件中添加如下配置
feign: client: config: default: loggerLevel: full requestInterceptors: com.example.feigndemo.interceptor.TokenRequestIntecepor