java - 更改 tomcat session ID 以包含大写和小写字符

标签 java session tomcat

我有一个要求,需要确保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:

6B95cDf17411a9555D0E42d99C8E029​​2

这是一个简单有效的更改,还是您看到任何潜在的问题。

谢谢。

最佳答案

这听起来像是一种非常奇怪的要求 - 这里重要的是底层 session ID 的长度,而不是它的编码方式(这样的随机 ID 与用户选择的密码之间存在差异) .如果认为 Tomcat 生成的 session ID 不够安全,最好的选择可能是简单地提高 sessionIdLength 的值。范围。

话虽如此,如果您确实需要生成自己的 ID,那么自定义 org.apache.catalina.SessionIdGenerator(可能扩展 StandardSessionIdGenerator)将是一种方式去。

关于java - 更改 tomcat session ID 以包含大写和小写字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58315906/

相关文章:

php - 强制特定用户在 codeigniter 中注销并销毁他的 session

java - 签署 java applet 以在没有 java 警告的情况下工作

Java JNDI 查找名称兼容 Tomcat 和 Weblogic

java - Apache 点燃: ScanQuery giving exception

java - 如何知道 JTable 是否为空?

java - 不向 Android 中的 AsyncTask 传递任何内容

php - $_Session "complication"登录和注销 php

java - 迭代器无法再次迭代

php - Laravel,页面刷新后显示数据库记录更新

java - 在 Tomcat/Axis2 中使用 JAW-XS 注释