今天的文章介绍JWTtoken如何保证微服务链接中信息不丢失?它被正式称为令牌中继。什么是令牌中继?通俗地说,token中继就是让token在微服务链接调用中向下传递,从而保证每个微服务都能获取到token中的用户信息。下面的一个订单示例如下图所示:订单流程客户端携带token请求网关。认证成功后,网关会解析token中的用户信息,放入请求头中发送给订单服务。同样,订单服务需要将用户信息传递给账户服务,以获取用户的账户信息。那么问题来了?如何保证网关服务->订单服务->账户服务中的用户信息传递是一个痛点解决方案。openFeign调用过程中无法自动中继token,需要手动传递。传递令牌信息。注意:openFeign在开启断路器后内部会调用启动子线程,所以传统方案直接在RequestInterceptor中设置是不可行的。那么如何保证子线程也能获取到请求头中的用户信息呢?答案是:神器RequestContextHolder。RequestContextHolder在内部是通过InheritableThreadLocal实现子线程共享信息的。在FeignCircuitBreakerInvocationHandler类中,还有如下一行代码:RequestContextHolder.setRequestAttributes(requestAttributes);它是使用RequestContextHolder将请求信息保存在其中,所以令牌中继的实现只需要读取RequestContextHolder的信息即可。详细代码如下:/***@author公众号:码猿技术专栏*用于实现令牌信息中继*/@ComponentpublicclassFeignRequestInterceptorimplementsRequestInterceptor{@Overridepublicvoidapply(RequestTemplatetemplate){//GetHttpServletRequestHttpServletRequesttextUhttpRequestConvletRequestRequest=RequesttilsfromRequestContextHolder);//在RequestContextHolder中获取信息Map
