SpringBoot项目中访问controller接口报Creation of SecureRandom instance for session ID generation using

bug原因

今天测试人员在测试的时候发现获取图形验证码接口在访问时候加载速度非常慢,要一两分钟才能加载出来,看日志的时候发现报了下边的一段警告日志:

2019-01-24 09:36:33.654 [http-nio-8080-exec-5] WARN org.apache.catalina.util.SessionIdGeneratorBase:180 - Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [106,771] milliseconds.
2019-01-24 09:36:33.656 [http-nio-8080-exec-3] WARN org.apache.catalina.util.SessionIdGeneratorBase:180 - Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [26,105] milliseconds.

通过搜索发现原因如下

linux默认的SecureRandom实现方式是非常慢的NativePRNG,而在Windows上的默认实现是SHA1PRNG,你也可以在Linux上指定使用该方式。

……NativePRNG会不断从操作系统获取熵(从/dev/urandom读取),其它PRNG则不会获取这些额外的熵。

AESCounterRNG差不多比SHA1PRNG快的十倍,而如果我没记错,SHA1PRNG比NativePRNG快两到三倍

SecureRandom是java用来获取高级随机数的实现,而访问获取图形验证码接口速度很慢的原因就是因为在linux上项目生成随机数的时候使用的是最慢的NativePRNG导致的

解决办法

  1. 在 JVM 环境中解决(我在项目中使用的是这种方式)
    打开$JAVA_PATH/jre/lib/security/java.security这个文件找到修改该securerandom.source的值,如果是jdk11的话,没有jre,security/java.security文件在conf文件夹中
修改前
securerandom.source=file:/dev/random

修改后
securerandom.source=file:/dev/./urandom
  1. 如果为SpringBoot项目可以在执行jar启动命令中添加配置
修改前
java -jar pc.jar

修改后
java -jar -Djava.security.egd=file:/dev/./urandom pc.jar
  1. 在Tomcat环境中解决

可以通过配置 JRE 使用非阻塞的 Entropy Source:
在 catalina.sh 中加入这么一行:

-Djava.security.egd=file:/dev/./urandom 

即可。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值