java中http请求中 sessionId的生成方式

以前一直不知道sessionId 是在什么地方生成的。一脸蒙圈。以及生成规则。
这个是在容器里生成的
今天扒了扒源码。 看的是springBoot 中 内嵌的tomcat 生成sessionId 的方式
在 这个 类 中: org.apache.catalina.util.StandardSessionIdGenerator

`

``java
public class StandardSessionIdGenerator extends SessionIdGeneratorBase {
    public StandardSessionIdGenerator() {
    }

    public String generateSessionId(String route) {
        byte[] random = new byte[16];
        int sessionIdLength = this.getSessionIdLength();
        StringBuilder buffer = new StringBuilder(2 * sessionIdLength + 20);
        int resultLenBytes = 0;

        while(resultLenBytes < sessionIdLength) {
            this.getRandomBytes(random);

            for(int j = 0; j < random.length && resultLenBytes < sessionIdLength; ++j) {
                byte b1 = (byte)((random[j] & 240) >> 4);
                byte b2 = (byte)(random[j] & 15);
                if (b1 < 10) {
                    buffer.append((char)(48 + b1));
                } else {
                    buffer.append((char)(65 + (b1 - 10)));
                }

                if (b2 < 10) {
                    buffer.append((char)(48 + b2));
                } else {
                    buffer.append((char)(65 + (b2 - 10)));
                }

                ++resultLenBytes;
            }
        }

        if (route != null && route.length() > 0) {
            buffer.append('.').append(route);
        } else {
            String jvmRoute = this.getJvmRoute();
            if (jvmRoute != null && jvmRoute.length() > 0) {
                buffer.append('.').append(jvmRoute);
            }
        }

        return buffer.toString();
    }
}``

由此可见。生成的sessionId 是 16个随机字节+jvmRoute信息,且jvmRoute默认为空字符串,设置的话需要通过系统变量jvmRoute获取。
理论上 分布式环境会存在重复的问题。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值