jar 包编码问题,会导致 Security 的 ThreadLocal 出现问题吗?

2021-11-16 11:38:44 +08:00
 zzfer

在使用 gitlab 的 CI/CD 功能时,部署成功后发现登录不上了。

经过排查,发现登录后获取用户时:SecurityContextHolder.getContext().getAuthentication()为空。在网上多方查询,这里用户为空的原因基本上是 ThreadLocal 限制的原因

发现线上的 jar 包一直不行。但是下载到本地,解压后重新打成 jar 包就行。具体命令如下

解压:jar -xvf xx.jar

重新压缩:jar -cfM0 xx.jar ./

然后再线上服务器上,进行同样的解压压缩,也还是不行。

解压对比 jar 包全部内容,个别配置文件不一样,替换成一样的也不行。我感觉唯一可能的就是编码问题。想问问各位彦祖 有遇到过类似的问题吗?或者知道一些这方面的情况

1320 次点击
所在节点    程序员
7 条回复
AoEiuV020
2021-11-16 12:16:10 +08:00
你这折腾几天了,
我只能猜 jdk 版本问题了,确保 jdk, jre, javac, java ,确保 openjdk/oraclejdk 要一样,大版本号一样,小版本号一样,
chendy
2021-11-16 12:29:35 +08:00
你也说了是配置文件不一样,所以是什么配置文件怎么个不一样,对登录流程有没有影响?
aguesuka
2021-11-16 12:54:41 +08:00
控制变量法. 三个帖子看下来我都不清楚 ic 打的包本地能不能运行. 如果不能运行, 给登录打个端点, 一路跟踪到 ThreadLocal 不就完了.

我也怀疑是编码问题, 不过是把异常 catch 住没日志的那种.
aguesuka
2021-11-16 12:57:55 +08:00
@aguesuka "运行" 应该是 "复现"
zzfer
2021-11-16 13:32:47 +08:00
@AoEiuV020 感谢回复,目前 jdk 版本一致了

@chendy 感谢回复。配置文件不影响,替换成一样的了也不行

@aguesuka 感谢回复。包都可以跑起来。就是调用 auth 的时候获取不到当前用户登录的信息。包可以跑,但包不能打断点,本地可以打断点,但可以正常获取到用户信息
aguesuka
2021-11-16 13:39:26 +08:00
服务器上打的 jar, 在本地用命令跑起来可以复现这个问题吗? 如果不能复现, 就是环境的问题, 如果能复现, 用 IDEA 给 jar 包打断点.
Buges
2021-11-16 15:06:05 +08:00
如果怀疑 threadlocal 有问题,可以 gdb 进去看一下。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/815738

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX