在使用 gitlab 的 CI/CD 功能时,部署成功后发现登录不上了。
经过排查,发现登录后获取用户时:SecurityContextHolder.getContext().getAuthentication()为空。在网上多方查询,这里用户为空的原因基本上是 ThreadLocal 限制的原因
发现线上的 jar 包一直不行。但是下载到本地,解压后重新打成 jar 包就行。具体命令如下
解压:jar -xvf xx.jar
重新压缩:jar -cfM0 xx.jar ./
然后再线上服务器上,进行同样的解压压缩,也还是不行。
解压对比 jar 包全部内容,个别配置文件不一样,替换成一样的也不行。我感觉唯一可能的就是编码问题。想问问各位彦祖 有遇到过类似的问题吗?或者知道一些这方面的情况
1
AoEiuV020 2021-11-16 12:16:10 +08:00
你这折腾几天了,
我只能猜 jdk 版本问题了,确保 jdk, jre, javac, java ,确保 openjdk/oraclejdk 要一样,大版本号一样,小版本号一样, |
2
chendy 2021-11-16 12:29:35 +08:00
你也说了是配置文件不一样,所以是什么配置文件怎么个不一样,对登录流程有没有影响?
|
3
aguesuka 2021-11-16 12:54:41 +08:00
控制变量法. 三个帖子看下来我都不清楚 ic 打的包本地能不能运行. 如果不能运行, 给登录打个端点, 一路跟踪到 ThreadLocal 不就完了.
我也怀疑是编码问题, 不过是把异常 catch 住没日志的那种. |
5
zzfer OP |
6
aguesuka 2021-11-16 13:39:26 +08:00
服务器上打的 jar, 在本地用命令跑起来可以复现这个问题吗? 如果不能复现, 就是环境的问题, 如果能复现, 用 IDEA 给 jar 包打断点.
|
7
Buges 2021-11-16 15:06:05 +08:00 via Android
如果怀疑 threadlocal 有问题,可以 gdb 进去看一下。
|