我有一个要求,需要确保Tomcat生成的session id格式应该包括大写、小写字符和0-9。 我检查了Tomcat的源代码。 \org\apache\catalina\util\StandardSessionIdGenerator.java
在方法 public String generateSessionId(String route)
将字节渲染为十六进制数字字符串的代码如下:
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)));
看起来像这样,当将大写字母“A”更改为“a”时,我就可以实现我的目标。(目标是生成的 session ID 将同时包含 A-Z、a-z 和 0-9)
更改后生成的session id:
6B95cDf17411a9555D0E42d99C8E0292
这是一个简单有效的更改,还是您看到任何潜在的问题。
谢谢。
最佳答案
这听起来像是一种非常奇怪的要求 - 这里重要的是底层 session ID 的长度,而不是它的编码方式(这样的随机 ID 与用户选择的密码之间存在差异) .如果认为 Tomcat 生成的 session ID 不够安全,最好的选择可能是简单地提高 sessionIdLength
的值。范围。
话虽如此,如果您确实需要生成自己的 ID,那么自定义 org.apache.catalina.SessionIdGenerator
(可能扩展 StandardSessionIdGenerator
)将是一种方式去。
关于java - 更改 tomcat session ID 以包含大写和小写字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58315906/