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

从入门到精通:MediaGo跨平台部署全攻略,Docker+NAS实战案例深度拆解!

本篇将深入解析开源媒体处理工具MediaGo的运作机制,该软件具备跨平台兼容性,支持Windows、MacOS及Linux三大主流操作系统。其核心创新在于采用模块化架构设计,用户无需额外依赖任何插件即可完成快速部署。作为GitHub平台上的开源项目,该工具特别注重用户体验设计,通过Docker容器化方案可无缝接入各类网络存储设备,显著优化系统资源占用并提升数据处理效率。以飞牛云NAS系统为实施案例,本文将详细展示本地化部署全流程。

Yawesh的博客 1954

软考中级信息系统监理师(第二版)-第21章基础设施工程监理

由于网络信息技术的飞速发展,变化日新月异,网络设计不但要保证目前网络传输容量的要求,也要考虑今后网络的发展,满足当前以及今后相当一段时间内的网络需求,便于向新技术的升级和衔接,同时又需要保护原有的投资。通用布缆系统工程中,承建单位的竣工文档主要包括以下内容:承建合同,招标文件,投标文件,设计方案,工程实施组织设计方案,工程施工报告,隐蔽工程记录,变更记录,自测报告,信息点分布图(表),园区、楼宇、水平配线表,楼层平面图及无线设备点位图,无线设备信息表,竣工图纸等。多排安装时,列间距不应小于1200mm。

2301_78583973的博客 1400

shiro框架如何保持登录状态

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

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

代码复现1——Matterport3d数据集下载

进入“Dataset Download”部分,下载申请书,填写之后发送到指定邮箱(matterport3d@googlegroups.com),之后会收到回信,回信中附有一个download_mp.py的脚本文件。,大小约15G,并不是所有的Mp3d datasets,所有大小约1.3T。下载完成后如下图所示:我这边显示大小为16.1G。

qq_44100524的博客 8053

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

通过情感分类实例 详细介绍如果借助Huggingface平台 完成Transformers模型运行(包括配置环境-tokenizer-Model-输出头-预测)

attention_mask和padding是配套使用的,当人为去修改padding的时候,也要把attention_mask里面的参数进行修改。下载Huggingface包,Huggingface可以说是一个社区,集成了很多nlp的模型、数据集、预训练权重文件等等,并且免费,只需要pip install下载即可。那么用什么做分类就选择什么输出头,就import什么东西。代码中使用了自动分词器选择,它是由checkpoint指定的预训练模型关联的,不用我们自己选择tokenizer,它自动帮我们选择好了。

LZL2020LZL的博客 1135

ThingsBoard教程(一):ThingBoard介绍及安装

ThingsBoard介绍 最近看了很多开源的物联网的项目,其中有一个让我印象很深,那就是Thingsboard 下面我就给大家介绍一下这个项目,并指导大家如何在本地安装一个Thingsboard来体验它。 首先引用官网的项目介绍就是 一个开源的用于数据收集,处理,可视化和设备管理的开源物联网平台。 它通过行业标准的物联网协议(MQTT,CoAP和HTTP)实现设备连接,并支持云和本地部署。ThingsBoard结合了可伸缩性,容错性和性能,因此您永远不会丢失数据。 用它开源收集链接设备,收集设备的数据,

知无涯 2万+

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

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

long8723710的博客 1954

【深度学习新浪潮】近三年垂域大模型研究与产品进展全景洞察(2022-2025)

近三年来,垂域大模型完成了从技术探索到产业落地的关键跨越,在多个行业实现效率提升与价值创造。面对数据治理、技术适配、生态建设等挑战,未来需要通过技术创新、标准制定、人才培养等多维度发力,推动垂域大模型向更高效、更可靠、更普惠的方向发展。随着"人工智能+"行动的深入推进,垂域大模型将成为数字经济与实体经济深度融合的核心驱动力,为产业智能化升级注入持续动能。

专注:太空算力、AI infra、异构调度、大模型成本工程 786

Springboot+shiro 踢出SessionId

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

Joe_elena的博客 2501

(代码可运行)半导体器件和工艺模拟 使用Silvaco设计构建NMOS并提取各项工艺及器件参数

win10。

qq_20388971的博客 109

Davinci配置临界区Exclusive Area

在Exclusive Area专属区域内的代码段执行不会被中断,可以用于保护多个Runnable间的共享资源。Exclusive Area会对RTE的调度策略和配置进行约束。如果两个或多个Runnable指向同一个Exclusive Area,那么只有其中一个Runnable被允许在该Exclusive Area内执行。即这些Runnable在ExlcusiveArea内执行时不能并发运行(相互抢占)。:在完整执行期间,整个runnable都在临界区运行。:执行期间可以进入临界区。

qq_42851449的博客 503

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

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

Morty的技术乐园 3530

jre9下载 jdk9

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

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

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

weixin_43823332的博客 3609

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

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、付费专栏及课程。

余额充值