我有一个返回int类型的函数.但是,我只有TAX枚举的值.
如何将TAX枚举值转换为int?
public enum TAX {
NOTAX(0),SALESTAX(10),IMPORTEDTAX(5);
private int value;
private TAX(int value){
this.value = value;
}
}
TAX var = TAX.NOTAX; // This value will differ
public int getTaxValue()
{
// what do do here?
// return (int)var;
}
Run Code Online (Sandbox Code Playgroud) 我一直Random (java.util.Random)用来洗牌一副52张牌.有52个!(8.0658175e + 67)可能性.然而,我发现种子java.util.Random是a long,它在2 ^ 64(1.8446744e + 19)处小得多.
从这里开始,我怀疑是否java.util.Random 真的那么随意 ; 它实际上能够生成所有52!可能性?
如果没有,我怎样才能可靠地生成一个更好的随机序列,可以产生所有52个!可能性?
我有问题,Tomcat 7在启动时非常慢.我在日志文件中找到了这个:
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [12,367] milliseconds.
Run Code Online (Sandbox Code Playgroud)
安全性很重要,当然,但不是在我的开发机器上.我完全可以使用标准的快速随机数发生器.所以我不需要这个非常慢的SecureRandom实现.
问题是:如何禁用它?搜索解决方案,但只找到一些关于randomClass可以设置为的属性的弃用信息java.util.Random.我还发现这个属性secureRandomClass现在似乎在Tomcat 7中被命名了.我试图将它设置为java.util.Random但是这会失败,因为Tomcat 7将对象强制转换为java.util.SecureRandom(并且还记录了指定的类必须扩展java. util.SecureRandom,因此不再可能使用java.util.Random.)
那么我怎样才能摆脱这个非常慢的随机数生成器启动,以便我的开发tomcat尽可能快地启动/重启?
请不要将其标记为重复.对于这两个问题,这是一个后续问题.
我理解,替换
securerandom.source=file:/dev/urandom
Run Code Online (Sandbox Code Playgroud)
同
securerandom.source=file:/dev/./urandom
Run Code Online (Sandbox Code Playgroud)
在$JAVA_PATH/jre/lib/security/java.security将解决这个问题.
我的问题是,在制作中这样做是否可以?这会对安全性产生什么影响(比如会话ID变得可预测)?如果这不太安全,还有其他方法可以更快地提供足够的熵吗?
我使用openstack进行部署(或者只是说,使用AWS或GCP或任何其他云提供商).因此,添加声卡等硬件设备对我来说不是一个选择.
我有一个基于Web的Java应用程序,它为会话信息生成随机UUID.我们的一位测试人员根据他自己的分析声称最多可以生成350毫秒来生成UUID,但我还没有能够复制他的结果.他指出这篇文章http://www.cowtowncoder.com/blog/archives/2010/10/entry_429.html来帮助支持他的结果.我想看看是否有其他人在Java 6或Java 7应用程序中使用Java的内置UUID生成功能遇到了这个限制.
我正在使用JUnit测试JERSEY Client + HTTPS来测试secure web service运行Jetty.我的一个呼叫是wr.get( ClientResponse.class)在每个块之后挂起10秒钟9-10 requests.等效Apache client代码在几毫秒内运行.如果我切换Jetty to HTTP模式,问题就会消失.
我在用 Jersey bundle & client 1.14 and Jetty 6.1.26
apache客户端工作
@Test
public void testApacheClient() throws Exception
{
HttpClient client = new HttpClient();
ProtocolSocketFactory socketFactory = new EasySSLProtocolSocketFactory();
Protocol https = new Protocol( "https", socketFactory, 443 );
Protocol.registerProtocol( "https", https );
//Finishes in < 1 second
for ( int i = 0; i < …Run Code Online (Sandbox Code Playgroud) 我在连接到Oracle数据库时遇到问题,需要很长时间(约5分钟),并发送以下显示的异常.大多数情况下,在第一个错误之后,同一进程的下一个连接正常工作.
它是RHEL 6机器,具有两个不同的网络接口和IP地址.
注意:我没有使用类似的URL:"jdbc:oracle:thin:@xxxx:yyy,它实际上是:"jdbc:oracle:thin:@xxxx:yyyy:zzz.SID不缺,对不起:(
这大致是我孤立的:
bin/java -classpath ojdbc6_g.jar -Djavax.net.debug = all -Djava.util.logging.config.file = logging.properties
Class.forName ("oracle.jdbc.OracleDriver")
DriverManager.getConnection("jdbc:oracle:thin:@xxxx:yyyy", "aaaa", "bbbb")
Run Code Online (Sandbox Code Playgroud)
错误StackTrace:
java.sql.SQLRecoverableException: IO Error: Connection reset
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:533)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:557)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:233)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:29)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:556)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:221)
at test.jdbc.Main(Test.java:120)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
at oracle.net.ns.DataPacket.send(DataPacket.java:248)
at oracle.net.ns.NetOutputStream.flush(NetOutputStream.java:227)
at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:309)
at oracle.net.ns.NetInputStream.read(NetInputStream.java:257)
at oracle.net.ns.NetInputStream.read(NetInputStream.java:182)
at oracle.net.ns.NetInputStream.read(NetInputStream.java:99)
at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:121)
at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:77)
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1173)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:309)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:200)
at oracle.jdbc.driver.T4CTTIoauthenticate.doOSESSKEY(T4CTTIoauthenticate.java:404)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:430)
... 35 more
Run Code Online (Sandbox Code Playgroud)
这里有一个非常详细的日志: …
这段代码安全吗?
SecureRandom randomizer = new SecureRandom(String.valueOf(new Date().getTime()).getBytes());
Run Code Online (Sandbox Code Playgroud)
这是实例安全随机种子的正确方法吗?
假设你做的很简单:
public class Main {
public static void main(String[] args) {
long started = System.currentTimeMillis();
try {
new URL(args[0]).openConnection();
} catch (Exception ignore) {
}
System.out.println(System.currentTimeMillis() - started);
}
}
Run Code Online (Sandbox Code Playgroud)
现在使用http:// localhost as 运行它args[0]
它需要~100 msec完成.
需要5000+ msec.
现在在linux或docker中运行相同的东西:
~100 msec~350 msec为什么是这样?为什么平台之间有这么大的差异?你能为这个做什么?
对于长时间运行的应用程序服务器和具有自己长而重的初始化序列的应用程序,这5秒可能无关紧要.
然而,有很多应用程序,这个最初的5秒"挂起"很重要,可能会令人沮丧......
有很多问题询问 SecureRandom 的特定启动是否“好”,但我找不到经验法则。
创建“良好”随机 SecureRandom 的最佳方法是什么?
// Fast
// Is it a good random?
SecureRandom secureRandom = new SecureRandom()?
// Freezes for a few seconds after being used several times - until getting a random enough seed.
// See http://stackoverflow.com/questions/137212/how-to-solve-performance-problem-with-java-securerandom#comment68934647_137212
// Is it a good random?
SecureRandom secureRandom = new SecureRandom(SecureRandom.getSeed(20))?
// Freezes for a very long time. Waited minutes and still no return :(
SecureRandom secureRandom = new SecureRandom.getInstanceStrong()?
Other?
Run Code Online (Sandbox Code Playgroud) java ×10
random ×3
security ×3
random-seed ×2
tomcat ×2
cryptography ×1
encryption ×1
enums ×1
https ×1
jersey ×1
oracle11g ×1
performance ×1
permutation ×1
redhat ×1
spring-boot ×1
uuid ×1
windows ×1