开发BUG记录–关于SecureRandom
上周去客户现场部署项目,遇到了一个小BUG,功能简单描述就是,点击按钮,根据后台方法,随机从数字、字母、特殊字符中取值拼接后返回页面,开发的时候,在windows上运行正常。但是到客户现场之后,点击按钮,卡死了。开始到处找问题,连接没错,请求也有,到底卡在哪里了?
后来百度发现是SecureRandom的问题
解决方法
- 在Tomcat环境中解决:
可以通过配置 JRE 使用非阻塞的 Entropy Source:
在 catalina.sh 中加入这么一行:-Djava.security.egd=file:/dev/./urandom 即可。
- 在 JVM 环境中解决(本人使用此方法):
打开jdk安装路径 $JAVA_PATH/jre/lib/security/java.security 这个文件,找到下面的内容:
securerandom.source=file:/dev/random
替换成:
securerandom.source=file:/dev/./urandom
3.还原原代码,采用Random random = new Random();
关于SecureRandom详细的内容,请参照下面的链接:
Java 随机数生成器 Random & SecureRandom 原理分析