最近用上了sonarqute 对项目进行了扫描,接纳了针对
new SecureRandom()
变更为SecureRandom.getInstanceStrong()
的建议,结果深坑似海~
事发
一个内部应用项目, 需要短信进行验证登录,需要生成随机验证码,但是发版本后,请求长时间不回执,最终502
504
, 无异常。
排查过程
查看日志,因为没加上 requestid/traceid
只能通过thread
按照时间端查询,经过查询,基本都是一个状态
2021-03-09 11:01:26.341 [http-nio-8000-exec-1] DEBUG org.springframework.web.servlet.DispatcherServlet - POST "/xxxx", data={}
针对 thread http-nio-8000-exec-1
查抄,后面就再也没出现这一线程
真的是 百思不得其解 , 于是 开始疯狂加 log
日志,在测试环境中进行测试
注意: 重点来了,wsl 环境中模仿了
centos
, 竟然顺利执行了!
也就是说 在测试环境中,并没发现任何问题!
于是回想起来,本次版本更新对此方法 最大的操作, 就是将 验证码这个随机数更新了,铁定就是它的问题。
于是开始 度娘 起来 ,然后就知道了 这个坑爹的玩意,不同的系统下,出现的问题不一样
具体的问题分析 可以参考 这篇关于SecureRandom.getInstanceStrong()引发的线程阻塞问题分析