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

别再死磕MuJoCo了!用PyBullet+Stable-Baselines3搞定机械臂强化学习(保姆级环境配置) 本文详细介绍了如何使用PyBullet和Stable-Baselines3构建机械臂强化学习系统,绕过昂贵的MuJoCo许可壁垒。通过实战指南,包括环境配置、机械臂Gym环境构建、训练策略与调优技巧,帮助开发者快速掌握机器人强化学习技术,提升智能控制效率。 阅读详情

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

在使用shiro的时候,曾经有段时间很苦恼,因为我cookie的sessionId经常无故被改,然后抛There is no session with id [xxxx]的异常。我们知道,当请求过来,shiro创建session后,会把sessionId写回到客户端的cookie中。每二个请求过来时,shiro会拿到这个cookie里的sessionId去查找,如果查找不到,就有可能抛There is no session with id的异常。通过抛这个异常的会有两种情况,一种就是我刚才说的,cookie被改写了,因为shiro默认的cookie名叫JSESSIONID,当在web.xml里配置的请求拦截配得不合理时,就有可能被改写。在我的项目中,因为有些静态资源配置了不拦截,就会被容器改写了这个cookie。后来,干脆把cookie的名字改了,不再叫JSESSIONID。还有一种就是浏览器打开很久都没有操作,然后shiro定时清理了不活动的session,这时浏览器再发请求过来,因为session已被清理,也会抛There is no session with id。更改cookie的名字方法如下:

 

       <bean id="shiroSessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
		<property name="sessionDAO" ref="sessionDAO"/>
		<!-- <property name="sessionValidationScheduler" ref="shiroSessionValidationScheduler"/> -->
		<property name="sessionValidationInterval" value="1800000"/>  <!-- 相隔多久检查一次session的有效性 -->
		<property name="globalSessionTimeout" value="1800000"/>  <!-- session 有效时间为半小时 (毫秒单位)-->
		<property name="sessionIdCookie.domain" value=".xxx.com"/>
		<property name="sessionIdCookie.name" value="jsid"/>
		<property name="sessionIdCookie.path" value="/"/>
		<!-- <property name="sessionListeners">
			<list>
				<bean class="com.concom.security.interfaces.listener.SessionListener"/>
			</list>
		</property> -->
	</bean>


我们打开shiro的DefaultWebSessionManager类源码就可以知道,里面有个private Cookie sessionIdCookie;属性,这个就是sessionId的cookie。在DefaultWebSessionManager的构造器里,初始化的名字取的是ShiroHttpSession.DEFAULT_SESSION_ID_NAME,也就是"JSESSIONID",在这里我们不去改源码,只要通过spring改sessionIdCookie的属性即可。

 

 

public DefaultWebSessionManager() {
        Cookie cookie = new SimpleCookie(ShiroHttpSession.DEFAULT_SESSION_ID_NAME);
        cookie.setHttpOnly(true); //more secure, protects against XSS attacks
        this.sessionIdCookie = cookie;
        this.sessionIdCookieEnabled = true;
    }

 

 

 

 

 

在上面的xml配置中,写了sessionIdCookie.domain的值为.xxx.com,这个根据自己的项目而定。这里配置为的是某域名及其二级域名都能共享这个cookie。还有sessionIdCookie.name,这个就是cookie的名字,值为jsid。这样我们就可以看到,cookie会多了一个名字jsid,值为当前session的id的键值。在上面还配置了两个关于session有效期的配置,一个是sessionValidationInterval,表示shiro的定时器多久去检查一次session的有效性,一个是globalSessionTimeout,表示session的有效时长。当然,我们也完全可以息定义定时器,把定时器注入到DefaultWebSessionManager的sessionValidationScheduler属性中,只是个人觉得没这个必要。

高效爬取懂车帝车型数据:从静态解析到动态反爬实战 本文详细解析了如何高效爬取懂车帝车型数据,从静态HTML解析到动态接口反爬的完整实战路径。文章重点介绍了使用浏览器开发者工具定位数据、应对CSS混淆与参数加密等反爬策略,并提供了整合静态与动态抓取逻辑的Python代码示例,帮助开发者稳健地获取结构化车型信息。 阅读详情

相关推荐

LSTM量化选股实战:从数据清洗到回测归因的工程化闭环

LSTM(长短期记忆网络)是一种专为建模长程依赖而设计的循环神经网络,其门控机制能有效应对金融时序数据的非线性、高噪声与动态演化特性。相比传统统计模型或简单RNN,LSTM在股价趋势建模中展现出更强的鲁棒性与泛化能力,尤其适合处理日频多因子时序信号。其技术价值不仅在于提升预测精度,更在于支撑可归因、可审计的量化策略工程实践——从特征构建、标签定义到滚动回测,每一步都需严防未来信息泄露与过拟合风险。典型应用场景包括A股多因子选股、行业轮动信号生成及Alpha组合优化。本文聚焦LSTM在真实量化场景中的落地难点

weixin_33158887的博客 399

Shiro中的session和cookie

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

m0_67265464的博客 2638

Sylvester结式法求解多项式方程

Sylvester结式法,结式,消元法,ctfshow 七夕杯 LUCK7,crypto,WriteUp

u010883831的博客 4533

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

博客已移至 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的o...

Dylan的博文 1万+

k最近邻算法——电影分类及案例详解

如图3-7所示,若将国际象棋棋盘放在二维直角坐标系中,格子的边长定义为1,坐标的x轴及y轴和棋盘方格平行,原点恰落在某一格的中心点,则王从一个位置走到其他位置需要的步数恰为二个位置的切比雪夫距离,因此切比雪夫距离也称为棋盘距离。关于这里的距离度量,这个电影分类的例子有2个特征,也就是2维的,可以使用我们高中学过的两点距离公式(两点距离公式其实就是欧氏距离在二维空间上的公式,也就是欧氏距离n的值为2的情况,欧氏距离也称为欧几里德距离)来计算距离,如图3-3所示。对数据进行归一化,避免量纲对计算距离的影响。

ZhShy 4558

Warning-[INFL_DELTA] Too many events zero delay loop

项目场景: 运用VCS工具执行仿真的时候,遇到如下错误提示,但仿真还在继续。 Warning-[INFL_DELTA] Too many events Possible zero delay loop. Too many events in the simulation at time 0 fs. 问题描述: 为什么会有这个问题; 什么导致了这个问题; 原因分析: 1、为什么会有这个问题 由于竞争条件或编码风格不明确,可能会产生零延时回路,导致仿真挂起或仿真时间无限。 2、什么导致了这个问题 举

hh199203的博客 1万+

Shiro自定义获取sessionid的方式

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

qq_45644484的博客 2103

Habitat安装全网最详细教程,手把手带你跑通example.py(全网唯一)

全网最详细具身智能仿真平台habitat的安装教程

shannanshouyin的博客 2756

修改shiro的cookie的名称

1、情况 在同一个域名下部署两套不同的项目,端口号不同,都采用shiro安全框架。 2、出现问题:两个系统同时登陆后会出现相互干扰的情况 3、原因:同一个域名下两个系统的cookie名称相同(shiro默认的cookie名为;JSESSIONID),相互覆盖; 4、解决方案:修改shiro默认的cookie名 springboot整合shiro修改的代码 //同一个域下两个项目使用shiro,c...

weixin_40010498的博客 5630

OAuth2.0集成SpringSecurity加JWT实现单点登录

单点登录(Single sign on),英文名称缩写SSO,SSO的意思就是在多系统的环境中,登录单方系统,就可以在不用再次登录的情况下访问相关受信任的系统。也就是说只要登录一次单体系统就可以

Nicky's blog 9038

华为od 面试八股文_C语言_02_含答案

华为od 面试八股文_C语言_02_含答案

MISAYAONE的博客 2230

shiro 自定义多sessionIdCookie 配置 重写

关于shiro中sessionId的自定义重写,上篇文章有涉及 通过上次的引入,发现对spring注入机制反而有跟多的理解 所以直接动手撸起袖子开干。   一 需求 首先是我需要做什么,因为一个项目集成两个系统的原因,导致session相互污染,导致登陆或异常登陆session管理混乱。 查找资料其中有人遇到过类似的问题。 &lt;!-- 会话Cookie模板 --&gt;...

z362249834的博客 3841

HQChart实战教程49-点击修改K线颜色及背景色

HQChart实战教程49-点击修改K线颜色及背景色需求效果图步骤1. 注册点击监听事件2. 修改K颜色添加一个自定义颜色的K线klineoption清空所有自定义颜色的K线option交流QQ群: 950092318HQChart代码地址完整例子 需求 对点击的K线修改颜色。 效果图 步骤 1. 注册点击监听事件 事件ID JSCHART_EVENT_ID.ON_CLICK_CHART_PAINT, 注册监听事件见教程 HQChart使用教程5- K线图控件操作函数说明 this.Create=func

小银 2911

自定义shiro的sessionIdCookie

dxyzhbb的博客 1761

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

在shiro当设置sessionIdCookie配置的domain和访问url不匹配时,每次请求都会重新生成session

在Servlet容器中,默认使用JSESSIONID Cookie维护会话 如下配置了domain <!-- 设置Cookie名字, 默认为: JSESSIONID 问题: 与SERVLET容器名冲突, 如JETTY, TOMCAT 等默认JSESSIONID, 当跳出SHIRO SERVLET时如ERROR-PAGE容器会为JSESSIONID重

zsg88的专栏 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

shiro 获取cookie

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

Hi, Sun 3440

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Shiro的session id 变化很快,导致验证码过期,用不了

今天,以shiro做一个项目研究,发现shiro的session id变化很快,查了很久,结果在网上发现了一个说法: &lt;bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"&gt; &lt;property name="sessionDAO" ...

wilsonke的专栏 3544

将 Apache Shiro 改造成 JWT 认证方式

要想成功改造,只需做到三点 用 Shiro 提供的 DefaultWebSessionManager 替代默认的 ServletContainerSessionManager - ServletContainerSessionManager 是 DefaultWebSecurityManager 使用的默认实现,用于 Web 环境,其直接使用 Servlet 容器的会话 ...

pomer_huang的博客 6201

Shiro DefaultWebSessionManager的设计概念

默认的web应用Session管理器,主要是涉及到Session和Cookie 具备了SessionIdCookie、SessionIdCookie启用开关 涉及到的行为:添加、删除SessionId到Cookie、读取Cookie获得SessionId 构造器 public DefaultWebSessionManager() { // Cookie模板,支持Se...

928

shiro redis session共享

shiro 做session共享

苦涩的博客 717

Shiro第十三章-RememberMe和Cookie

简介 首先在登录页面选中remember me然后登录成功;如果是浏览器登录,一般会把remember me的cookie写到客户端保存下来; 关闭浏览器再次打开,会发现浏览器还是记住你的; 访问一般的网页服务端还是知道你是谁的,且能正常访问; 但是比如我们访问淘宝时,如果要查看我的订单或进行支付时,还是需要再进行身份验证,以确定当前用户还是你。 remember me...

测试 1270

深入解析Shiro Session管理:架构、集群实战与安全加固

在Java Web应用开发中,会话管理是构建安全、稳定用户交互体验的核心基础。其原理在于通过服务器端维护用户状态,实现请求间的身份与数据关联。这项技术的核心价值在于为分布式系统提供统一的状态管理能力,确保用户登录状态与上下文信息在集群环境下的一致性。典型的应用场景包括电商平台的购物车状态保持、后台管理系统的权限上下文传递以及高并发下的用户会话共享。本文聚焦于Apache Shiro框架的会话管理机制,通过剖析其SessionManager与SessionDAO的协作,并结合Redis缓存实现,详细阐述了如何

congji3817的博客 344

【shiro】shiro配置session会话过期时间

前言 转载自:[https://blog.youkuaiyun.com/qq_42944520/article/details/88027178] 代码 加上这块代码即可 // 配置org.apache.shiro.web.session.mgt.DefaultWebSessionManager(shiro session的管理) @Bean public DefaultWebSessionManager getDefaultWebSessionManager() { DefaultWebSessionMan.

Meditation_Crazy 1213

spring+shiro+cas的整合问题之循环重定向

场景介绍: 1.CAS服务器采用JASIG CAS 【3.5.3】 2.SHIRO【1.2.3】 3.SPRING【4.1.RELEASE】 服务器配置的域名为www.test.com,登录的路径为www.test.com/cas/ 客户应用域名为localhost:8080,应用的项目地址为localhost:8080/demo/admin/main,(登录地址为:localhost:

积硅步 1万+

springboot+shiro 一个项目部署多个,session名冲突问题

springboot+shiro 一个项目部署多个,session名冲突问题 问题 前几天遇到一个比较奇怪的问题,一个项目部署多个,端口不同。启动之后在同一浏览器中进行登录,后一个登录的会把前一个登录的挤掉,导致只能登录一个。 原因 是因为sessionid相同,然后修改了springboot中sessionManager的相关配置,主要是...

小皮的博客 2220

解决shiro升级1.6后url拼接;jsession引发400问题

在shiro.xml文件中添加配置 配置解析 1、添加 sessionManager bean <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"> <!-- 去掉url ;jsessionid= --> <propert...

bgxabc的博客 1750
上一篇: 我的shiro之旅: 九 shiro 清理缓存的权限信息
下一篇: 我的shiro之旅: 十一 shiro的权限设计
LHacker
博客等级 码龄17年 162粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值