微服务项目如何打通用户上下文信息❤

92 阅读1分钟

feign拦截器、网关全局拦截器、MVC拦截器 配合ThreadLocal来完成

1.首先在gateway网关层,通过全局拦截器做登录拦截,如果没有token用户信息就跳转的登陆页面,如果请求的登录接口就放行;有token就解析token获取用户id,然后添加到请求头中放行

2.在服务模块,通过MVC的拦截器获取请求头中的loginId,然后通过ThreadLocal来保存用户id,这块使用的是InheritableThreadLocal可以通过getMap方法直接获取当前线程下的ThreadLocalMap,通过key为"LoginId",value为LoginId来保存用户上下文。

3.在服务之间相互调用的时候mvc拦截器拦截不到feign调用,我们使用Feign请求拦截器(feign拦截器的apply方法可以自定义添加请求头)复写apply 方法,将我们的自定义的请求头 通过header存进去,下游便可以用过MVC拦截器获取请求头中LoginId来保存用户上下文信息。