南宁电子推广网站,招远做网站价格,建俄语网站哪个公司最好,宁乡市住房和城乡建设局网站SpringBoot HttpSession 自定义生成sessionId 业务场景实现方案 业务场景
最近在做用户登录过程中#xff0c;由于默认ID是通过UUID创建的#xff0c;缺乏足够的安全性#xff0c;决定要自定义生成 sessionId。
实现方案
正常的获取session方法如下#xff1a;
HttpSe… SpringBoot HttpSession 自定义生成sessionId 业务场景实现方案 业务场景
最近在做用户登录过程中由于默认ID是通过UUID创建的缺乏足够的安全性决定要自定义生成 sessionId。
实现方案
正常的获取session方法如下
HttpSession session request.getSession(true);通过 DEBUG 找到创建 sessionId 的执行方法如下所在的类名 ManagerBase
generateSessionId 方法的具体实现底层的生成 sessionId 逻辑暂时先不看。 于是就有一个想法是不是可以继承这个类再重写获取 sessionId的方法最后把实现类注入到容器中就可以实现。
说干就干新写一个类继承 ManagerBase抽象类但是需要我重写 load 和 unload 方法我本意是只重写获取 sessionId 方法的不想搞这么麻烦还要再换一个方案。 随后注意到 ManagerBase 已存在的子类 StandardManager 实现了这两个方法那么问题来了是否可以直接继承 StandardManager 类呢答案是可以的。
于是就有了下面的自定义子类 关键的来了要怎么把 CustomStandardManager 管理类替换掉原来的执行方法呢还是要研究源码看下面这段代码 管理器是从上下文中获取那么可以尝试通过上下文对管理器赋值找了好久终于找到了赋值的方法如下 sessionId的生成方式
服务器端生成sessionid的方式有许多种。下面是其中一种常见的方式 随机生成服务器端可以使用随机数生成算法来生成一个唯一的sessionid。这种方法使用的是服务器的随机数生成器并且通常会结合当前时间戳等其他因素以增加sessionid的安全性和唯一性。 哈希计算服务器端可以使用一个哈希函数对一些唯一的信息进行计算以生成一个sessionid。这些唯一信息可以包括用户的IP地址、浏览器类型、操作系统等等。 使用UUIDUUIDUniversally Unique Identifier是一种标识符具有全球唯一的特性。服务器可以使用UUID库来生成一个唯一的sessionid。 使用加密算法服务器端可以使用加密算法对一些唯一信息进行加密以生成一个唯一的sessionid。这些唯一信息可以包括用户的IP地址、浏览器类型、操作系统等等。常见的加密算法包括MD5、SHA-1、SHA-2等。 自定义生成服务器端也可以根据自己的需求和特定的业务逻辑设计一种特定的算法来生成sessionid。这种方法通常结合了一些特定的标识符、唯一信息和加密算法等。
需要注意的是生成sessionid时要确保生成的sessionid具有足够的安全性和唯一性以防止被恶意攻击者伪造或篡改。此外服务器端还要考虑sessionid的存储和管理方式以便能够有效地识别和验证sessionid的有效性。