Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将tomcat会话id更改为包含大写和小写字符_Java_Session_Tomcat - Fatal编程技术网

Java 将tomcat会话id更改为包含大写和小写字符

Java 将tomcat会话id更改为包含大写和小写字符,java,session,tomcat,Java,Session,Tomcat,我有一个要求,需要确保Tomcat生成的会话id格式应该包括大写、小写字符和0-9。 我检查了Tomcat的源代码。 \org\apache\catalina\util\StandardSessionIdGenerator.java 在方法publicstringgenerateSessionId(stringroute)中 有几行代码可以将字节转换为十六进制数字的字符串,如下所示: byte b1 = (byte) ((random[j] & 0xf0) >> 4); by

我有一个要求,需要确保Tomcat生成的会话id格式应该包括大写、小写字符和0-9。 我检查了Tomcat的源代码。 \org\apache\catalina\util\StandardSessionIdGenerator.java

在方法publicstringgenerateSessionId(stringroute)中

有几行代码可以将字节转换为十六进制数字的字符串,如下所示:

byte b1 = (byte) ((random[j] & 0xf0) >> 4);
byte b2 = (byte) (random[j] & 0x0f);
if (b1 < 10)
    buffer.append((char) ('0' + b1));
else
    buffer.append((char) ('A' + (b1 - 10)));
if (b2 < 10)
    buffer.append((char) ('0' + b2));
else
    buffer.append((char) ('A' + (b2 - 10)));
byte b1=(byte)((random[j]&0xf0)>>4);
字节b2=(字节)(随机[j]&0x0f);
如果(b1<10)
append((char)('0'+b1));
其他的
append((char)('A'+(b1-10));
如果(b2<10)
append((char)('0'+b2));
其他的
append((char)('A'+(b2-10));
看起来,将大写字母“A”更改为“A”时,我可以实现我的目标。(目标是生成的会话id将同时包含A-Z、A-Z和0-9)

更改后生成的会话id:

6B95cDf17411a9555D0E42d99C8E0292

这是一个简单有效的改变,还是你看到了任何潜在的问题


谢谢。

这听起来像是一种非常奇怪的要求——这里重要的是底层会话ID的长度,而不是它的编码方式(像这样的随机ID和用户选择的密码之间有区别)。如果Tomcat生成的会话ID:s被认为不够安全,那么最好的选择可能是提高参数的值


话虽如此,如果您真的需要生成自己的ID,那么定制的
org.apache.catalina.SessionIdGenerator
(可能扩展
标准SessionIdGenerator
)将是一个不错的选择。

感谢您的宝贵想法。但由于某种原因,要求生成的ID应该是该格式,当然,要求还要求长度和字节长度。Tomcat默认生成的会话id是这部分的投诉,只有格式需要调整。我提到的要求[link]仍然是一个不好的要求-id不是通过随机选取字符生成的(在这种情况下是有意义的),而是随机选取一定数量的字节,然后进行编码。当然,有时我们也需要遵守一些不好的要求。Tomcat的会话id是首先获取SecureRandom,然后将十六进制数字编码为字符串。我认为它是安全的。最初的问题是,如果我们通过使用这种方法(像我提到的那样稍微修改一下)来更改它,使最终编码的字符串包含上限/下限/数字,那么它会导致任何问题吗?只要生成的字符串可以包含在URL中而不转义(建议的更改仍然允许),我无法想象任何问题。您不会增加安全性,但会遵守要求(至少有一定的可能性-您当然可能最终生成一个只包含大写或小写字符的ID,但可能性很低)。我只是为了好玩而做了一个测试,在1000000次尝试中,大约9994600次同时包含了一个大写和小写字符。