一、该问题的重现步骤是什么?
1. bladex微服务,登录成功后,点击任意我自己服务的菜单,报错“用户令牌过期,请重新登录”并弹回到登录界面,如果来来回回操作好几次,就能登录进去没问题了
2. 我能看到,我登陆进去,调用我自己的接口的时候,报错 {"code":401,"success":false,"data":null,"msg":"请求未授权"}
二、你期待的结果是什么?实际看到的又是什么?
我期待登录进去之后点击菜单,不会被弹出到登录界面
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
我用的bladex4.4.0,服务部署在欧拉操作系统上
四、请提供详细的错误堆栈信息,这很重要。
重要:我登陆进去点bladex框架带的菜单就不会被弹出到登录界面,就我自己的服务的菜单才会出现这个问题,比如点 工作台的通知公告没问题。
五、若有更多详细信息,请在下面提供。
框架的服务,比如gateway我是部署了三台服务器,在naginx做的负载均衡。
检查你的菜单后端有没有加@PreAuth这类控制角色访问权限的逻辑,以及检查一下有没有配置接口权限。
你可以在这里打断点,看看具体是哪里报的错:https://center.javablade.com/blade/BladeX-Tool/src/branch/master/blade-core-auth/blade-core-secure/src/main/java/org/springblade/core/secure/interceptor/TokenInterceptor.java#L74
作者您好,感谢百忙之中抽空帮我解决问题,我查看了源码之后,定位到了大概的报错位置,但是具体的深层次的异常原因分析不出来
我能定位到大概的报错位置
这是我的请求信息
我得token都在request里面,我分析不出来,为什么源码这个
AuthUtil.getUser();
方法的执行结果是 null 呢
我这个问题有点奇怪,我把服务器的biz项目停掉,本地ideal启动biz项目,让服务器的nacos走我本地的项目服务,就不会报错能正常使用。我服务器的项目起来就会报这个错。
检查线上的sign-key是不是和本地配置的一样,另外你可以在线上的这里打个log,把参数都打印出来看看执行流程
作者大大您好,我加了一点日志重新debug了
根据我写的两行日志
我把服务器上报错的这个token和signkey拿出来,在我本地写一个main方法,他就可以解析出来
我服务器环境也很奇怪,他大部分时候都是解析不出来,但是偶尔他就解析出来了,功能是能正常使用的;我本地是完全没问题的,登录进去所有功能都不会报这个错。
感谢作者大大答疑。问题解决了,是服务器时间不同步,导致的jwt解析问题,我框架服务器时间比biz服务的时间晚了,导致JWT的nbf(Not Before)声明的时间在当前系统时间之后,也就是说,这个JWT在当前时间点还不可用。我登录进去等一会,再点击biz服务就可以了。我把所有服务器时间同步了就可以了。
扫一扫访问 Blade技术社区 移动端