场景:微服务下使用定时任务进行数据统计,涉及到跨服务调用,由于服务中加入全局拦截器,跨服务调用过程中一直提示用户未登录
原因分析:
一:由于外部请求是通过ZUUL分配服务调用,经过外层过滤,每一个请求过来会创建独立的栈内存(线程),request对象属于当前线程独有(包含用户登陆信息),内部任务调度器跨服务访问的时候是开辟的单独的线程执行,request对象中没有用户的登陆信息,所以会被拦截
解决方案:
外部访问网关外层进行过滤、内部如果用到拦截器进行统一的异常处理,可以将当前需要跨服务调用的方法在拦截器URI中忽略掉
或者使用restTemplate将用户登陆信息放入Header信息中跳过权限校验