项目中遇到一个问题,排查了一天,终于知道原因了。
环境介绍:本地 windos,正式 linux
用Random生成随机数,然后扫描软件说不安全,不推荐用,推荐用SecureRandom,然后改成这样。
Random rand = SecureRandom.getInstanceStrong();
int i2 = rand.nextInt(i);
改完之后测试本地没有问题,发布,然后正式调用这个方法的页面,死活保存不了,后台也不报错。用最笨的方法每行代码下面打印一句话的方法,发现是随机数的问题。
然后搜了之后发现,说是SecureRandom在Linux环境容易线程阻塞。
解决 办法:我们先改回Random了。
网上提供了三种解决办法:
1.获取SecureRandom 实例时指定SHA1PRNG算法:
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
2.启动命令加上参数:
-Djava.security.egd=file:/dev/urandom
3.使用org.apache.commons.lang3包的RandomStringUtils。
等我们试过之后,我再更新。