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

会话标识未更新问题 <br /> 有一段时间没有上优快云了,今天看到有好几个网友问我“会话标示未更新问题”,以下是我的解决办法。<br /> 我的系统在做AppScan安全扫描时,爆出一个高危漏洞:会话标识未更新。提供的解决办法是,在用户登录时始终使用新的会话。<br /> 我仔细查看了我的系统。原来在用户进入登录页面,但还未登录时,就已经产生了一个session,用户输入信息,登录以后,session的id不会改变,也就是说还是以前的那个session(事实上session也确实不 阅读详情

Shiro Security是非常不错的Security框架,我们系统在使用过程中发现Shiro在登录之后不会生成新的Jessionid。这显然会出现Session_Fixation。Shiro自己说会在下一个版本1.3 fix这个问题,在这之前只能学Spring Security来实现重新生成Session。其实简单就是在登陆之后把session数据复制一份到新的session。

Shiro中要做到这一点可以通过实现可以通过继承org.apache.shiro.web.filter.authc.AuthenticatingFilter (一般是继承AuthenticatingFilter的子类FormAuthenticationFilter),重写executeLogin方法就可以了。

 protected boolean executeLogin(ServletRequest request, ServletResponse response) throws Exception {
        AuthenticationToken token = createToken(request, response);
        if (token == null) {
            String msg = "createToken method implementation returned null. A valid non-null AuthenticationToken " +
                    "must be created in order to execute a login attempt.";
            throw new IllegalStateException(msg);
        }
        try {
            Subject subject = getSubject(request, response);
            //获取session数据
            Session session = subject.getSession();
            final LinkedHashMap<Object, Object> attributes = new LinkedHashMap<Object, Object>();
            final Collection<Object> keys = session.getAttributeKeys();
            for (Object key : keys) {
                final Object value = session.getAttribute(key);
                if (value != null)
                { attributes.put(key, value); }
            }
            session.stop();
            subject.login(token);
            // 登录成功后复制session数据 
            session = subject.getSession();
            for (final Object key : attributes.keySet())
               { session.setAttribute(key, attributes.get(key)); }
            return onLoginSuccess(token, subject, request, response);
        } catch (AuthenticationException e) {
            return onLoginFailure(token, e, request, response);
        }
    }
shiro会话管理 Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如Tomcat),不管是J2SE还是J2EE环境都可以使用,提供了会话管理,会话事件监听,会话存储/持久化,容器无关的集群,失效/过期支持,对Web的透明支持,SSO单点登录的支持等特性。 所谓会话,即用户访问应用时保持的连接关系,在多次交互中应用能够识别出当前访问的用户是谁,且可以在多次交互中保存一些数据。如访问一些网站时登录成功后,网站可以记住用户,且在退出之前都可以识别当前用户是谁。 基础组件 1.1 Se... 阅读详情

相关推荐

Shiro + Redis自定义session会话管理

Shiro + Redis自定义session会话管理 博客:Shiro + Redis自定义session会话管理 此图非常重要!!!镇楼 0x001 重写SessionManager shiro提供了三种默认实现: DefaultSessionManager: 用于java se 环境 ServletContainerSessionManager:默认使用的实现,Servlet容器管理 D...

iLeeHan 1393

rememberMe

session shiro提供的session不依赖web容器,可以直接使用,如果是在web环境下,session中的数据和httpsession中的数据是通的。Shiro中的session可以出现在任何地方,例如service、dao等,不需要从controller中传递session参数,...

chengxiesuan0485的博客 302

cookie、session、sessionId、token区别,以及shiro 生成token

为什么要使用cookie和session? cookie和session是一种追踪客户端与服务器端通信的一种方式。 我们知道http链接是无状态链接,每次客户端访问服务端,服务端都不会知道访问者是谁,这样的好处就是http设计简单,缺点也显而易见:每次关闭浏览器后又要重新登录 生成的记录如何返回给客户,客户下次访问又如何传递到服务器中? 这就是利用了cookie。cookie是一段存储在浏览器中的文本,它可以保存用户的信息,服务端通过设置返回头的set-cookie字段就能返回给浏览器并保存cookie,

易水寒冰的博客 1150

微信小程序+springboot+shiro实现登录

一、自定义WxRealm,继承自AuthorizingRealm package com.ruoyi.framework.shiro.realm; import com.ruoyi.customer.domain.CustomerInfo; import com.ruoyi.customer.domain.CustomerLoginLog; import com.ruoyi.customer...

zhang8907xiaoyue的博客 4177

数学建模入门——数据预处理(全)

介绍了数据预处理的入门知识

n04j04h06的博客 4346

Keil v5.11给STM32烧录程序记录

1)安装KeilMDK511 2)安装ST Link下载器驱动 3)打开Keil v5,加载工程文件 4)load pack(Keil.STM32F1xx_DFP.1.1.0和Keil.STM32F0xx_DFP.1.2.0) 5)编译程序- 0 Error(s), 0 Warning(s). 6)烧录程序 ...

守望的距离 6281

shiro框架如何保持登录状态

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、shiro保持登录状态的方式? 二、具体过程 1.登录系统 2.关闭浏览器 3.登出系统 4.RememberMe功能 前言 最近一段时间在研究shiro框架,发现网上很少有讲在登录之后,shiro是如何保持登陆状态的,或者换句话说就是后台服务能够在你登录之后,知道你是谁,知道你有哪些权限,知道你的角色是什么 一、shiro保持登录状态的方式? 现在大部分的web项目都是采用前后端分离的架构,而保持登录状态

目标检测专栏持续更新中,改进YOLO系列通用,适用v5、v7、v8、所有博客均是团队原创博客,所有文章禁止转载,违者必究。 1599

Figma汉化教程

Figma汉化教程

cc蒲公英的博客 1万+

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

Autojs实战教程---番茄免费小说Apk文件和源码

邀请码:782383363 字节跳到的App,推荐给大家,还是值得用一用的。不废话直接代码。 代码是带UI的复制后可以直接使用。 "ui"; //#region UI var rootUrl = "http://114.115.220.1:91";//各位大神小弟自己的服务器别黑谢谢 var storaySign = "FanqieXiaoShuo0412326@163.com"; var woolStorage = storages.create(storaySign);//创建本地存储 var

zy0412326的专栏 2万+

GPT大模型在数学建模中的实战应用:从思路启发到代码生成

数学建模是将现实问题抽象为数学问题并求解的核心方法,其关键在于通过合理的假设与简化,构建可计算的数学模型。传统建模依赖MATLAB等工具进行推演试错,而大语言模型的出现革新了这一范式。GPT等模型通过理解自然语言、辅助逻辑推理与代码生成,能有效提升建模效率与质量,在问题解析、模型构建、算法实现等环节提供关键支持。本文聚焦GPT在数学建模中的具体应用,涵盖赛题解读、模型推导、代码生成与结果分析,并结合实战案例,探讨如何将其作为“副驾驶”融入建模全流程,实现人机协同的智能化建模。

weixin_29061465的博客 324

解决shiro的登录成功后跳转到自定义error.html的问题

解决shiro的登录成功后跳转到error.html 先说一下问题现象:saas项目中,登录成功之后,跳转了error.html,停顿一会儿后进入主页面。 说一下我处理这个问题的步骤: 搞清楚这个页面登录的流程。 问题产生的原因,产生的时机 根据上边的思路先处理这个saas平台登录的流程,梳理如下: 项目的存在LoginController。存在接口login、main、mianIndex等接口。并且该controller对局部异常做了处理: /** * 当前controller类

long8723710的博客 1954

FPGA实战:手把手教你用Verilog实现Modbus CRC16校验(附完整代码)

本文详细介绍了在FPGA中实现Modbus RTU协议CRC16校验模块的完整实战方案。针对硬件设计中的时序、资源与性能挑战,文章从算法原理出发,提供了清晰的Verilog模块接口、状态机设计、查表ROM实现及优化策略,并附带了完整的可综合代码与测试平台,帮助工程师高效构建稳定可靠的工业通信系统。

weixin_29164185的博客 432

Springboot+shiro 踢出SessionId

运用场景 : 管理员踢出在线用户,让其页面失效。重登即可激活 思路: 1.利用sessionId ,如果踢出 将其标记为 0,重定向到 踢出页面 2.在登录的时候,将sessionId 标记为1,表示 已激活 可以正常使用 3.将 sessionId 和值,存入redis hash表里面,每次比较 从redis 中取出 4.利用  HandlerInterceptorAdapter 拦截...

Joe_elena的博客 2501

输入文件(Example-1.inp)参数解读与获取方法

弹性参数:优先使用默认值(泊松比 0.25、杨氏模量 8×10⁵ bars),或参考区域地质 / 地球物理研究。断层参数:从地震矩反演、GPS 位移反演、地质图 / 震源机制获取(核心参数,需确保准确性)。网格 / 图形参数:根据研究区范围和输出需求调整(步长 / 放大系数等)。

2301_79258000的博客 81

OpenClaw对接本地大模型:Llama3/Qwen/ChatGLM全适配,完全私有化部署

OpenClaw对接本地大模型,是企业级AI智能体落地的必经之路——它不仅解决了数据隐私和合规问题,还能大幅降低成本、提升响应速度、实现定制化。这篇文章我给大家完整拆解了两套部署方案:Ollama(新手首选,5分钟搞定)和vLLM(生产环境首选,高性能),覆盖了Llama3/Qwen/ChatGLM三大主流模型,还有真实的落地案例、高级优化、踩坑避坑指南,看完你就能零代码完成完全私有化的部署。从零开发自定义工具,给OpenClaw添加专属业务能力;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 808

Web应用安全————Shiro 解决会话固定漏洞

引言 承接上一篇《Web应用安全————账号冻结与 Session 实时失效》关于 session 的学习,本篇博客聚焦如何通过 shiro 解决会话固定导致的漏洞问题。 首先,没怎么接触过应用安全方面的小伙伴可能会发起疑问 - 什么是会话固定? 简单来说,系统在登录前和登录后使用同一个 session id,就是会话固定,默认的session 管理机制都是会话固定的。会话固定可能会造成“会...

Morty的技术乐园 3530

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SpringBoot+shiro+redis 一个账户只允许一处登录,强制用户下线

SpringBoot+shiro+redis 一个账户只允许一处登录,强制用户下线 概况 前期引入了redis来解决session共享,但并么有限制一个账户多人同时在线,且shiro本身没有带这个控制功能。在网上找了其他人的思路,但效果都有点不太好,于是自己写一下自己的项目实战。(第一次分享,希望各位大神多多指教)。 于是乎,利用redis 来记录一个用户的sessionID,如果一个用户存在多个sessionId,则获取队列末尾的sessionId,用sessionId查询对应的session,给sess

weixin_43823332的博客 3609

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java的sessionid_java – 使用sessionId或用户名密码进行Shiro验证

Shiro’s Session support is much simpler to use and manage than either of these two [web container or EJB Stateful Session Beans] mechanisms, and it is available in any application, regardless of conta...

weixin_39834154的博客 673

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Shiro+Redis幽灵Session排查:前后端分离下匿名访问为何创建Session

在前后端分离架构中,认证与授权是保障系统安全的基础机制。其核心原理在于通过过滤器链对请求进行拦截,并借助Session或Token维护用户状态。然而,当Session管理配置不当时,匿名请求可能触发不必要的Session创建,导致Redis内存持续增长,影响系统稳定性。这一技术细节在Spring Boot与Shiro整合场景中尤为常见,尤其在高并发或压测环境下,幽灵Session问题会显著放大。本文基于真实案例,深入剖析Shiro在认证失败流程中创建Session的根因,并提供可落地的优化方案,帮助开发者规

weixin_34234721的博客 385

记一次与Shiro有关的错误,404导致session丢失需要重新登录

一 问题描述 前段时间上司突然叫我帮忙解决老项目上的一个bug,出现的问题是不同用户账号,进入同一个页面,有个别用户刷新一下当前页面就会重定向到登录页面,需要重新登录。 这是一个几年前的一个项目,使用的是Srping + Spring MVC + Shiro + Jsp的项目,之前没用过Shiro,所以对Shiro了解得不多。 二 问题排查 打开项目源码,先看进那个页面前时都做了什么处理。这是一个...

weixin_34292924的博客 1286

使用Shiro共享Session模拟单点登录

首先我们看Shiro的会话管理器的配置 <!-- shiro会话管理 --> <!-- 即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通 JavaSE 环境的,也可以是如 Web 环境的 --> <bean id="sessionManager" class="org.apache.shiro.web.session...

李昊翔的优快云 885

在某个请求获取HttpSession时,shiro JSESSIONID被覆盖

在某个请求获取HttpSession时,shiro JSESSIONID被覆盖 业务场景:在用户登录之后,shiro会在cookies中记录自己的sessionid;它对应的key默认是JSESSIONID;然后在某一次请求获取HttpSession(浏览器与服务器交互第一次获取HttpSession);然后在发送一个新的请求就需要重新登录 具体分析:在shiro登录成功之后会默认的给浏览器coo...

jiaxibusizzyu的博客 811

Shiro同一个账号不允许登陆两次

步骤如下: 1、获取所有在线用户的Session信息。 2、获取当前登陆人的sessionId。 3、设置与当前登录账号相同,但sessionId不同的session信息超时。 代码如下: if (!Global.TRUE.equals(Global.getConfig("user....

chuannie2342的博客 1056

shiro未登录重定向导致nginx无法匹配请求报错的解决

   在公司做的一个项目采用前后端分离的方式,前端用的是react,后端采用shiro来做权限控制和session管理,服务器上配置nginx使用8080作为监听端口。sessionID传递到前端保存在cookie中,请求后端接口时放在请求头中传到后台进行验证。     登录系统进行操作,一切很正常。但当我们重新发布时异常出现了:登录到系统的用户无法操作也不能跳转到登录页,经过分析后是因为服务器...

FinelyYang的专栏 5562
上一篇: Web应用测试监控执行时间 -- JavaSimon
下一篇: Shiro 结合 kcaptcha实现登录验证
开心的D哥
博客等级 码龄22年 63粉丝 110原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值