我的shiro之旅: 六 自定义shiro的sessionId

shiro会话管理 Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如Tomcat),不管是J2SE还是J2EE环境都可以使用,提供了会话管理,会话事件监听,会话存储/持久化,容器无关的集群,失效/过期支持,对Web的透明支持,SSO单点登录的支持等特性。 所谓会话,即用户访问应用时保持的连接关系,在多次交互中应用能够识别出当前访问的用户是谁,且可以在多次交互中保存一些数据。如访问一些网站时登录成功后,网站可以记住用户,且在退出之前都可以识别当前用户是谁。 基础组件 1.1 Se... 阅读详情

博客已移至 http://blog.gogl.top

 

shiro有自己的sesison概念,shiro的session并不是java ee的session。通常,我们看到shiro的sessionId格式类似c6395bbc-425d-43b3-a444-04fee5a92e95,是因为shiro产生sesisonId是通过UUID生成的。我们可以看到shiro-core-xx.jar的org.apache.shiro.session.mgt.eis包下有个JavaUuidSessionIdGenerator,shiro的sessionId默认是通过该类生成的。可以看看源码。

 

public class JavaUuidSessionIdGenerator implements SessionIdGenerator {

    /**
     * Ignores the method argument and simply returns
     * {@code UUID}.{@link java.util.UUID#randomUUID() randomUUID()}.{@code toString()}.
     *
     * @param session the {@link Session} instance to which the ID will be applied.
     * @return the String value of the JDK's next {@link UUID#randomUUID() randomUUID()}.
     */
    public Serializable generateId(Session session) {
        return UUID.randomUUID().toString();
    }
}


是通过调用java的UUID来生成一个唯一的ID。

 

我们可以自定义类,重写generateId方法,然后把它注入到shiro中。我们可以拿java ee的sessionId作为shiro的sessionId返回。不过我们可以看到generateId方法的参数是Session,这个Session是shiro自定义的,通过它无法拿到java ee的sessionId。我的做法是,写一个拦截器,当讲求过来时,拿到sessionId放到当前线程里,需要的时候从当前线程里拿。类也很简单,代码如下:

 

/**
 * @author Dylan
 */
public final class HttpSessionIdHolder {

	private HttpSessionIdHolder(){}
	
	private final static ThreadLocal<String> SESSIONID = new ThreadLocal<String>();
	
	/**
	 * @return
	 */
	public static String getSessionId(){
		return SESSIONID.get();
	}
	
	/**
	 * @param request
	 */
	public static void setSessionId(String SessionId){
		SESSIONID.set(SessionId);
	}
	
	/**
	 * 
	 */
	public static void removeSessionId(){
		SESSIONID.remove();
	}

}

我们在拦截器里从request拿到sessionId,然后调用setSessionId方法把sessionId保存到当前线程中,需要的时候调用getSessionId就可以得到。

 

当然,也可以用其他方法。

那么,怎么注入给shiro替换默认的sessionId产生方式呢。在securityManager有个sessionManager属性,在sessionManager有个sessionDAO属性,在sessionDAO有个sessionIdGenerator只要替换就行。如

 

	<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
		<property name="sessionManager" ref="sessionManager"/>
	</bean>
	<bean id="sessionDAO" class="com.neting.security.infrastructure.shiro.cache.CustomShiroSessionDao">
		<property name="sessionIdGenerator" ref="sessionIdGenerator"/>
	</bean>
	<bean id="sessionIdGenerator" class="com.neting.security.infrastructure.shiro.ShiroSessionIdGenerator"/>
	<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
		<property name="sessionDAO" ref="sessionDAO"/>
	</bean><bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
		<property name="sessionManager" ref="sessionManager"/>
	</bean>
	<bean id="sessionDAO" class="com.neting.security.infrastructure.shiro.cache.CustomShiroSessionDao">
		<property name="sessionIdGenerator" ref="sessionIdGenerator"/>
	</bean>
	<bean id="sessionIdGenerator" class="com.neting.security.infrastructure.shiro.ShiroSessionIdGenerator"/>
	<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
		<property name="sessionDAO" ref="sessionDAO"/>
	</bean>

 

更简单的方式,在我的shiro之旅: 十 自定义shiro的SessionIdCookie这篇文章有介绍。

 

 

 

 

 

从公众号到后台:一次EduSRC漏洞挖掘实战全记录 Web应用安全的核心在于权限控制与接口安全。其基本原理是确保每个请求都经过严格的身份认证与授权验证,防止未授权访问与数据泄露。在技术实现上,后端服务必须遵循“永不信任客户端”的原则,对API接口实施细粒度的访问控制。对于企业而言,健全的权限体系能有效保护核心业务数据,避免因逻辑漏洞导致的安全事件。在教育、金融、政务等众多涉及敏感信息的应用场景中,接口未授权访问、敏感信息泄露等漏洞危害尤为突出。本文基于一次真实的EduSRC(教育安全应急响应中心)实战案例,详细剖析了如何从一个公开的公众号链接切入,通过分析前 阅读详情

相关推荐

2026年SRC漏洞挖掘实战指南:从信息收集到高级利用

在网络安全领域,漏洞挖掘是识别和利用系统安全弱点的核心技能。其基本原理是通过系统化的方法,发现软件或网络中的设计缺陷、配置错误或逻辑漏洞,从而评估和提升系统的安全性。掌握漏洞挖掘技术对于构建主动防御体系、推动安全左移具有重要价值,广泛应用于渗透测试、红蓝对抗和安全研究等场景。随着攻击面扩大和防御手段升级,现代漏洞挖掘更强调体系化思维和工程化实践,例如通过自动化工具链进行资产发现和攻击面测绘,结合业务逻辑分析挖掘高价值漏洞。本文聚焦于SRC(安全应急响应中心)漏洞挖掘,深入探讨信息收集、常见攻击手段组合利用以

weixin_34121304的博客 408

Shiro自定义获取sessionid的方式

一、创建一个自定义的session管理类,继承shiro默认的session管理类(DefaultWebSessionManger),重写getSessionId()方法,token为自定义请求头,值传的是sessionid。二、在Shiro配置类中创建一个返回安全管理器SecurityManager的bean方法,并设置session管理器为自定义的session管理器。

qq_45644484的博客 2103

2. Netty使用JSerialComm进行串口读取(二)

现在开始处理这些问题 第一个问题:串口读取超时异常一路传播到最后也没有处理。 ​ 第二个问题:即使处理了该异常,程序仍然退出,这不能满足一些实际使用要求需求。该问题与设置很长的读取超时时间没关系,无论多长到时间后总会退出。

s3c2410的博客 2462

shiro中后台服务器如何获取sessionId

在Web开发中,我们经常接触的就是session了;这里不说session和cookie;只讲服务器怎么确定用户的session; http协议本身是无状态协议,那后台是怎么确定用户的session呢? 这里以shiro的web开发为例,因为shiro的request和session只是对标准的request和session进行了封装,在 DefaultWebSessionManager中,...

ystyaoshengting的专栏 1万+

sdio wifi 移植

介绍 简单来说,sdio起源自sd标准,顾名思义就是sd的IO接口(interface)的意思,更具体的说明,sd本来是记忆卡的标准,但是现在也可以把SD卡拿来插上一些外围设备接口使用,这个就是就叫做sdio。 而且sdio本身是一种相当单纯的技术,通过sd的IO引脚来连接外部外围,并且通过sd的IO数据接位与外围传输数据,而且sd协会也推出很完整的sdio stack 驱动程序,使得sdio外围得开发与应用变得非常热门 这里我们要移植的是RTL8822cs的sdio WiFi 模块,将其移植到rk3

Enosji的博客 9611

6、核函数与再生核希尔伯特空间:原理、应用与实践

本文系统介绍了核函数与再生核希尔伯特空间(RKHS)的理论基础、核心性质及其在机器学习和信号处理中的广泛应用。文章从核方法的优势出发,阐述了其在非线性建模、正则化和算法核化方面的独特价值,并深入探讨了正定核、Mercer定理、表示定理等关键理论。通过构建多种标准核与工程专用核,展示了核函数的设计灵活性。结合支持向量回归(SVR)模型与多个MATLAB示例,详细说明了核方法的实际应用流程与操作技巧。最后,总结了核方法的应用领域、未来发展方向及学习实践建议,为读者提供了一套完整的理论与实践指南。

z2a3b4c5d的博客 145

shiro的会话管理器SessionManager

SessionManager会话管理器管理着应用中所有Subject的会话的创建、维护、删除、失效、验证等工作。 public interface SessionManager { Session start(SessionContext context); //启动会话  Session getSession(SessionKey key) throws SessionExce

zsg88的专栏 4973

Vision 机器视觉案例 之 零件边缘缺陷检测

缺陷检测工具

机器视觉李小白的博客 1386

shiro+springboot自定义sessionId

在shiro中,默认返回的sessionId是uuid或者是random随机的,我们可能需要根据我们的需求进行重写,需要重写sessionId我们只需要写一个类实现SessionIdGenerator中的generateId就行 1.自定义sessionId生成 自定义CustomSessionIdGenerator实现SessionIdGenerator接口,重写generateId(...

袖卷笛音的博客 7628

Experion PKS系列开发:I_O模块_ExperionPKS与第三方I-O模块的集成

通过上述步骤,可以成功将第三方I/O模块集成到Honeywell Experion PKS系统中,实现对现场设备的监视和控制。集成过程中需要注意选择合适的第三方模块,配置正确的通信参数,编写正确的控制逻辑,并进行充分的测试,以确保系统的稳定性和可靠性。不同的通信协议(如Modbus、Profibus、Ethernet/IP、CANopen、OPC UA)有其独特的配置和编程方法,但总体流程相似。在实际应用中,根据项目需求选择合适的协议和模块,可以有效提高系统的灵活性和适应性。

zhubeibei168的博客 1103

装配完整性检查系统:基于YOLOv10的螺丝/零件缺失自动检测(含UI界面与完整代码)

建议自行采集装配场景数据,标注缺失螺丝、错误零件等,模拟真实缺陷。手机/工业相机采集图像;使用LabelImg进行目标标注;转换为 YOLO 格式。本文构建了一个完整的装配完整性检测系统,基于 YOLOv10 实现高精度螺丝缺失检测,并使用 PyQt5 构建了图形界面,实现一键导入与可视化检测流程,适用于工业质检自动化部署。项目可灵活扩展至零件缺失、错装、错位、顺序错误等检测场景,是深度学习在制造业中落地的典型应用案例之一。

YOLO 701

我的shiro之旅 六 自定义shiro的sessionId

我们可以看到shiro-core-xx.jar的org.apache.shiro.session.mgt.eis包下有个JavaUuidSessionIdGenerator,shiro的sessionId默认是通过该类生成的。不过我们可以看到generateId方法的参数是Session,这个Session是shiro自定义的,通过它无法拿到java ee的sessionId。我的做法是,写一个拦截器,当讲求过来时,拿到sessionId放到当前线程里,需要的时候从当前线程里拿。当然,也可以用其他方法。..

m0_67391870的博客 1138

国产系统(统信 UOS )漏洞修复方式

2.1 服务器版(单漏洞更新):服务器标准版:yum upgrade-minimal --cve “CVE编号”服务器 D 版:sudo apt update&&sudo apt install “受影响的软件包”1 统信 UOS 漏洞修复方式在线升级修复桌面专业版:通过以下步骤打开在线升级:控制中心–>更新–>更新设置–>打开系统更新、安全更新。安装过程中,请勾选“我已阅读并知晓”,然后点击“开始升级”。2 点击“检查更新”–“全部下载”,如果不想进行系统更新,可以选择只下载“安全更新”。

Reyn_观极 5018

我的shiro之旅: 十 自定义shiro的SessionIdCookie

博客已移至 http://blog.gogl.top 在使用shiro的时候,曾经有段时间很苦恼,因为我cookie的sessionId经常无故被改,然后抛There is no session with id [xxxx]的异常。我们知道,当请求过来,shiro创建session后,会把sessionId写回到客户端的cookie中。每二个请求过来时,shiro会拿到这个cookie里的ses...

Dylan的博文 2万+

HTML流光爱心(完整代码)

HTML语言实现红蓝色流光爱心效果的完整代码。

AIGC 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

shiro 获取cookie

我的shiro之旅: 十 自定义shiro的SessionIdCookie 分类: shiro | 作者: lhacker 相关 | 发布日期 : 2014-11-12 | 热度 : 597° 在使用shiro的时候,曾经有段时间很苦恼,因为我cookie的sessionId经常无故被改,然后抛There is no session with id [xxxx]的异常。我们知道,当...

Hi, Sun 3440

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

我的shiro之旅: 十七 跨域session共享的一种解决方法

博客已移至 http://blog.gogl.top 在文章七里面有介绍session共享,不过只是在一个域名及其他子域间共享。有时候,我们需要在多个一级域名共享登录的session。当然,用shiro-cas是一个很不错的解决方法,应该也是大部分人使用的方法。不过因为种种原因,并没有选择shiro-cas的方式,就使用了其他方式代替,思路也来自shiro-cas。比如有www.a.com,ww...

Dylan的博文 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

shiro学习随笔【五】自定义生成会话ID--SessionIdGenerator

一、shiro的SessionDAO实现使用SessionIdGenerator接口自动的生成会话session ID;   二、SessionIdGenerator的具体实现类是JavaUuidSessionIdGenerator,生成会话ID的方法如下:   public Serializable generateId(Session session) { return UUI...

OceanSky的专栏 1万+

Shiro中的session和cookie

注意:在使用SessionListenerAdapter来监听session生命周期时,onStart()方法不能作为用户登陆日志的开始时间节点,因为session的创建是在第一次请求服务器创建的,而不是用户登陆时创建的,所以不要搞混;cookie都是key-value类型的,key的值是可以改变的,这点看下源码就可以知道,存储sessionid的cookie的key的值默认为JSESSIONID.4.此时我们在浏览器看下保存的cookie值,和服务端session的sessionid时一样的。

m0_67265464的博客 2638

shiro 获取请求头中的 sessionId

shiro 获取请求头中的 sessionId 前言:   在前后端项目中, 前端有可能会要求, 后台返回一个 sessionId 给他, 然后他在请求后台接口时, 把这个sessionId 带给后台, 后台拿到这个sessionId , 就能识别, 是那个用户.    在shiro中, 会返回一个 JSESSIONID , 其实就是sessionId .   如果不想把sessionId...

wxy49212的博客 2514

shiro中session的问题

原因: 默认DefaultWebSessionManager它只接受Cookie中存储的JsessionId. 查询发现再redis中不存在对应的key.客户发送请求时,再请求头中携带sessionId, 然后重写DefaultWebSessionManager中getSessionId()的方法。默认session存储再各自服务的内存中,可以让session统一存储再redis中。我们发现跨域请求,会发送两个请求:第一个OPTIONS请求,第二个请求是真实的请求。修改shiro的配置类。

2301_77664771的博客 911

【笔记】关于我不喜欢Shiro生成默认Cookie是JSESSIONID,我想修改为其他key的哪些事

修改Shiro默认Cookie是JSESSIONID,修改JSESSIONID为其他名称

深渊码头 1224

shiro中session的常见的问题

DefaultWebSessionManager 获取请求头中JSESSION ID的值通过RedisSessionDao 从Redis中查询该值对应的key 如果存在则认为当前用户登录。

m0_58259152的博客 1053

Shiro 自己实现登录后重新生成sessionid

学Spring Security来实现重新生成Session

cloud的技术积累 2万+

shiro(6)分布式应用鉴权方式之Shiro整合SpringBoot下自定义SessionId

Shiro 默认的sessionid生成 类名 SessionIdGenerator 创建一个类,实现 SessionIdGenerator 接口的方法 public class RandomSessionIdGenerator implements SessionIdGenerator { private static final Logger log = Logg...

奇点 888

shiro通过sessionId获取当前用户登录信息

一、应用场景 前后端分离架构,使用shiro做权限管理,登录成功将sessionId返回,访问接口时在请求头携带即可。由于业务需要,现有需要接口不做拦截,在方法内做权限判断,于是将sessionId携带在RequestParam中,进行登录或权限校验。 二、实现代码 ProfileResult:登录中构造安全数据的实体类 import com.guangjutx.entity.au...

dwhhome的博客 1万+
上一篇: 我的shiro之旅: 五 shiro与普通web项目集成
下一篇: 我的shiro之旅: 七 shiro session 共享
LHacker
博客等级 码龄17年 162粉丝 24原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值