我的shiro之旅: 十三 shiro 用户的登录与退出

Shiro整合SSH开发2:结合Struts2实现登陆和退出以及Shiro执行流程和原理解析 登陆原理如下: 当用户没有认证时,请求loginurl进行认证【在applicationContext-shiro.xml 配置中】,用户身份和用户密码提交数据到loginurl 从表单提交认证的request中被FormAuthenticationFilter拦截住,取出request中的username和password【这两个参数的名称是可以配置的】。 FormAuthentication 阅读详情

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

shiro的登录与退出非常简单,在这里简单给出代码,更详细可以参考官网。

(1) 用户的登录

 

public void login(User user, HttpServletRequest request, HttpServletResponse response) {
	user.encodePassword();
	baseLogin(user, request, response);
}

public void baseLogin(User user, HttpServletRequest request, HttpServletResponse response) {
		
	try {
		Subject subject= SecurityUtils.getSubject();
		if (subject.isAuthenticated()) {
			return;
		}
		//如果用户已登录,先踢出
		ShiroSecurityHelper.kickOutUser(user.getUsername());
			
		boolean rememberMe = ServletRequestUtils.getBooleanParameter(request, "rememberMe", false);
		UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(), user.getPassword(), rememberMe);
		subject.login(token); // 登录
	} catch (Exception e) {
		//做一些异常处理
	}finally{
		ShiroAuthorizationHelper.clearAuthorizationInfo(sessionUser.getUsername());
	}
}

这里需要注意的是在调用subject的login方法,其中传给 UsernamePasswordToken的用户密码应该是加密的,因为通常我们数据库保存的密码是加密后的,否则,将会登录不成功。当调用subject的login方法进行用户认证明,shiro将会调用我们息定义的realm相关方法,前面的文章也有介绍。上面的rememberMe会在下篇文章提到。当然,在登录之前,我们还应该做一些验证,比如用户输入的用户名密码是否为空,用户的有效期之类的,在这里不给出。

 

(2)用户退出

 

public void logout() {
	Subject subject = SecurityUtils.getSubject();
	if (subject.isAuthenticated()) {
		subject.logout(); // session 会销毁,在SessionListener监听session销毁,清理权限缓存
		if (LOG.isDebugEnabled()) {
			LOG.debug("用户" + username + "退出登录");
		}
	}
}


只要简单调用subject的logout方法就可以了。

 

单点登录之通过token获取用户信息、单点登录之安全退出、单点登录注册页面展示、用户注册页面实现、用户登录的实现 单点登录之通过token获取用户信息 首先还是看接口文档关于通过token获取用户信息的说明 看了说明文档我们便知道该怎么做了,在taotao-sso-interface工程的UserService接口类中添加一个接口 下面我们到UserServiceImpl类中实现getUserByToken方法 Service层写完后,我们再来完成Controller层,在UserController中添加... 阅读详情

相关推荐

顶刊《会计研究》数据复现|最新上市公司数智化数据

本文基于Python文本分析方法构建了中国A股上市公司数智化指标(1991-2024),通过识别年报中的"机器学习""智能医疗"等关键词,量化企业数字化与智能化融合程度。研究发现数智化企业更倾向于非正式渠道的定性披露以规避风险,该指标为监管完善信披规则提供了参考。研究还揭示了数智化对企业信息披露策略的转变,并提出了未来研究方向,包括数智化对绿色创新、ESG表现等影响机制。数据覆盖非金融类上市公司,采用文本挖掘技术构建结构化指标,为相关领域研究提供了微观基础。

PPdata_Academy的博客 1487

shiro实现系统的退出功能

思路: 1.shiro有许多过滤器,其中就有一个LogoutFilter的过滤器,只需要继承并重写preHandle方法 2.在配置文件中注入自定义实现的过滤器,在此配置当退出的时候应重定向到某个页面 3.注入自定义filter,并且配置过滤器链 4.直接在页面中配置相应退出链接 1.自定义实现LogoutFilter @Service public class SystemLogou

XWJ 2万+

【Docker】从零构建达梦DM8轻量级服务镜像:实战与优化

本文详细介绍了从零开始构建达梦DM8轻量级Docker镜像的完整实战流程。通过分析传统安装方式的痛点,阐述了使用Docker封装数据库的优势,并重点讲解了如何利用静默安装、精简组件、多阶段构建等优化技巧,打造一个体积小巧、启动迅速、配置灵活的DM8服务镜像,助力实现开发、测试与部署的环境一致性与高效性。

ooo22的博客 520

Shiro的退出登录状态的方式

方式一:使用系统过滤器 修改ShiroConfig,在filter表里加上登出的过滤: @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("dwSecurityManager") SecurityManager securityManager) { ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();

哈 4478

基于任务的功能磁共振成像的连接性分析

虽然这种方法通过减少偶然只选择特异性代表的可能性来改善可推广性,但类别内和类别间的变异性变得更难控制(例如,"鸟类"可能是一个比"车辆"更加/不那么同质的类别),并且可能会出现关于这些预定义类别是否是现实世界实体的有意义划分的担忧——尽管这个限制在某种程度上可以通过表征相似性分析来解决。特别是,海马单变量激活和语义认知区域(左下额回)中语义信息的表征强度之间的交互预测了项目的概念记忆,而海马单变量激活和视觉处理区域(腹内侧枕叶皮层)中视觉属性的表征强度之间的交互预测了图像样本的知觉记忆。

cc1609130201的博客 2231

DW1000芯片实战:如何用UWB技术打造10厘米精度的室内定位系统(附Arduino代码)

本文是一份基于DW1000芯片和UWB技术的实战指南,详细介绍了如何从零构建一个精度可达10厘米的室内定位系统。内容涵盖硬件选型与连接、软件环境配置、核心的双向测距算法实现,并深入探讨了信号干扰抑制、功耗优化等实战挑战,为物联网开发者提供了完整的Arduino代码和部署思路。

root9的博客 497

Spring Boot集成Shiro后退出失败的问题

Spring Boot集成Shiro后,用下面这种方法退出,回调退出地址的之后并没有到回调的地址,而是重新进入了首页,有时候还会在logout之前就进入首页,但是这个时候session已经清了,然后就报错了,搞不懂为什么会出现这种情况,后面我用了另一种方法,至少到现在没有出现这个问题。希望有大神知道原因的回复一下,万分感激。@RequestMapping("/logout") public Str...

sq287197314的博客 3936

从零到一:手把手教你用YonBuilder for NCC搭建NC Cloud 2021.11开发环境(含避坑指南)

本文详细指导如何使用YonBuilder for NCC搭建NC Cloud 2021.11开发环境,涵盖硬件要求、软件安装、YonBuilder配置及常见故障排除。特别提供避坑指南,帮助开发者快速上手NCC开发,确保环境配置的原子化分解和开发思维的体系化建立。

weixin_42523326的博客 346

Shiro退出机制是什么?

实现步骤如下,首先在Shiro配置文件下注明/logout=logout,这样当访问根路径logout时,可以直接跳转到logout的逻辑代码中去,在logout的contrller中需要利用session的 getAttributeNames方法进行获取内容,然后使用while循环调取session的删除方法将session作用域中的内容全部删除,然后再利用subject的api getsubject方法获取subject的内容,然后调取logout方法进行删除subject内容。

qq_68334807的博客 333

Open3D——点云构建Delaunay三角网【2026最新版】

点云构建Delaunay三角网

点云侠的博客 8368

2023最新多文明策略手游《万国觉醒内购版》最新整理Linux商业手工服务端+安卓+详细搭建教程

2023最新多文明策略手游《万国觉醒内购版》最新整理Linux商业手工服务端+安卓+详细搭建教程。源码内置详细搭建教程,感兴趣可自行下载。

百创科技 1714

springboot整合shiro-实现自己的登出(十六)

前面所有的博客登出都是使用的shiro默认自带的登出,使用方式也很简单,不用我们去实现退出功能,只要去访问一个退出的url(该 url是可以不存在),由LogoutFilter拦截住,清除session。(如果没有什么特殊需求,我建议直接使用shiro的登出) 具体如下: 8.png 只要拦截到访问/logout的请求,就会被走logout对应的 LogoutFilter,自动登出。 为什么要...

这个名字想了很久 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

shiro实现登录登出_我的shiro之旅: 十三 shiro 用户的登录与退出 | 学步园

shiro的登录与退出非常简单,在这里简单给出代码,更详细可以参考官网。(1)用户的登录public void login(User user, HttpServletRequest request, HttpServletResponse response) {user.encodePassword();baseLogin(user, request, response);}public vo...

weixin_36211941的博客 729

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

我的shiro之旅: 十二 shiro 踢出用户(同一用户只能一处登录)

博客已移至 http://blog.gogl.top 看了一下官网,没有找到关于如何控制同一用户只能一处登录的介绍,网上也没有找到相关的文章。可能有些人会记录用户的登录信息,然后达到踢出用户的效果。这里介绍一个更简单的方法。 如果我们跟shiro的源码,我们可以看到。当用户登录成功后,shiro会把用户名放到session的attribute中,key为DefaultSubjectContex...

Dylan的博文 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

springboot整合shiro实现登录认证授权以及退出

文章目录springboot整合shiro实现登录认证授权以及退出shrio简介环境准备创建一个springboot的项目导入相关的依赖springboot整合shiro的依赖thymleaf的依赖创建首页创建controllershiro重要概念拦截器拦截请求创建配置类修改首页登录页面登录认证授权退出 springboot整合shiro实现登录认证授权以及退出 shrio简介 shiro是一个权限管理框架,用于实现登录认证以及授权。 环境准备 创建一个springboot的项目 这里我创建的是最简单的we

dream_follower的博客 2827

shiro学习:shiro整合springweb项目实现用户登录和退出

一、实现原理 使用FormAuthenticationFilter过虑器实现 ,原理如下: 将用户没有认证时,请求loginurl进行认证,用户身份和用户密码提交数据到loginurl FormAuthenticationFilter拦截住取出request中的username和password(两个参数名称是可以配置的) FormAuthenticationFilter调用realm传入

刘大磊的博客 4721

shiro学习10-用户以及登录-登录与退出

<!--[if !supportLists]-->1、    前面已经介绍完了创建subject用户和封装shiro自己的session,这里介绍用户的登录和退出。  <!--[endif]-->直登录直接调用subject.login(token)方法即可,因为我们在创建subject的时候就把securityManager传入到了subject中,所以subjec...

iteye_14612的博客 507

shiro 删除用户session_我的shiro之旅: 十二 shiro 踢出用户(同一用户只能一处登录)...

看了一下官网,没有找到关于如何控制同一用户只能一处登录的介绍,网上也没有找到相关的文章。可能有些人会记录用户的登录信息,然后达到踢出用户的效果。这里介绍一个更简单的方法。如果我们跟shiro的源码,我们可以看到。当用户登录成功 后,shiro会把用户名放到session的attribute中,key为 DefaultSubjectContext_PRINCIPALS_SESSION_KEY,这个k...

weixin_29111593的博客 833

解决Springboot整合Shiro+Redis退出登录后不清除缓存

解决Springboot整合Shiro+Redis退出登录后不清除缓存

码农的艺术 1355

shiro实现单用户登录

shiro实现同一账号同时只能单用户登录 一.shiro中的过滤器 non org.apache.shiro.web.filter.authc.AnonymousFilter 匿名过滤器 authc org.apache.shiro.web.filter.authc.FormAuthenticationFilter 如果继续操作,需要做对应的表单验证否则不能通过 authcBa...

weixin_44060936的博客 1737

使用shiro进行登录和退出

一.配置web.xml               这个在web.xml配置的过滤器只是启动拦截请求的作用,真正处理请求是在spring配置的targetBeanName的值对应bean的id类 二.创建ApplicationContext-shiro.xml      如下:     1.shiro核心过滤器       filterChainDefinition

qq_36074062的博客 1万+

shiro实现登录登出_关于Shiro登陆退出遇到的一些问题

写在开始最近项目中出现一些问题,以前可能不大关注,但是问题是实实在在存在的。问题一系统重启用户登陆或者退出报错:Disk Write of 407a1347-c2c6-434e-89e3-365aa277497c failed这个问题,并不是经常出现,看详细错误信息,应该是数据 list或者map序列化的问题。看了一下实体类都实现了序列化。解决方案突然想起,以前是没有这个问题的,自从升级了Ehca...

weixin_30868873的博客 1094

Shiro一处登录与退出

Shiro一处登录与退出 退出 @RequestMapping("/loginout") public String loginOut(){ Subject sub = SecurityUtils.getSubject(); sub.logout(); return "userlogin "; } 一处登录 一处登录指的是用户只能在一台设备上登录,如果在另一台设备登录 则需要处理(先前用户退出) 实现方法.在认证之前看一下ses

qq_35752835的博客 503
上一篇: 我的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、付费专栏及课程。

余额充值