一、该问题的重现步骤是什么?
1. workbench-svc程序 运行相同的4个application,前后端用nginx做负载均衡,前端请求4个随机的后端运行的application程序
2. 前端登录账号,有几率出现“请求未授权”的提示,并且登录不进去,会返回到登录页
3.重复登录,退出,登录,有大几率出现请求未授权的情况。
二、你期待的结果是什么?实际看到的又是什么?
1、期待的结果:登录成功,实际看到的:“请求未授权”登录失败
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
bladex-boot版产品,在k8s集群上部署。
四、请提供详细的错误堆栈信息,这很重要。
1、容器打印的日志:
2、通过TokenInterceptor类跟踪到了 WebUtil.class,可能是
RequestContextHolder.getRequestAttributes()
为null,网上查了说跟子线程获取不到父线程的信息有关,但是并没有用到子线程,可能是RequestContextHolder源代码自动创建的?
3、后端api server运行相同的多个就会出现这种情况,运行一个不会出现。
五、若有更多详细信息,请在下面提供。
你负载均衡的策略是什么?
1、我们是在蓝鲸智云上部署的,我看了一下nginx的yml里没有配置负载均衡策略,应该用的k8s的负载均衡策略,随机访问的,目前遇到问题就是扩容后端svc的api server之后,就会出现“请求未授权”的情况。
2、在k8s里查看容器的日志就是报的 TokenIntercepter类里的preHandle方法里的 AuthUtil.getUser()为空就会打印 "签名认证失败"。一直点进去的话就是有一个RequestContextHolder.getRequestAttributes(),网上看了一下这个为空 的解决方法,可能跟线程有关,加了这段代码:
RequestContextListener (){ RequestContextListener()}
也没有解决。
RequestContextListener (){ RequestContextListener()}
@Bean
public RequestContextListener requestContextListener(){
return new RequestContextListener();
}
不知道显示正确了没有,就是上面的这段代码
扫一扫访问 Blade技术社区 移动端