shiro用户动态权限、在线用户管理

本文探讨了在使用Shiro时遇到的用户动态权限、缓存管理及在线用户管理问题。当用户权限或密码变更时,如何立即生效,以及如何实现强制下线和有效管理在线用户。文章详细解析了Shiro的缓存结构、登录授权流程,并提供了针对性的解决方案。
摘要由CSDN通过智能技术生成

此文章解决的问题

在一个项目中,如果项目中使用到了shiro的缓存功能,往往会出现以下问题:

  1. 当用户修改密码后,需要用户重新登录,新密码才能生效,如果用户不退出,则新密码不会生效。当系统允许多用户登录时,此问题更加严重。
  2. 当对用户的权限进行修改时,问题同上。
  3. 如何对在线进行管理,包括:立即使session失效,踢出用户等。

本篇文章将会介绍为什么会出现上述问题,以及其解决思路,在阅读这篇文章之前,首先你需要了解shiro中的缓存管理器、sessionDao等。

缓存

shiro中缓存主要分为以下三个部分:

缓存类型 含义
会话缓存 用户的session缓存
用户授权信息缓存 授权信息缓存,包含用户名、加密后的密码
用户权限信息缓存 用户的权限信息缓存,包含用户的角色、权限

shiro中存在一个缓存管理器,其按照名称对各个缓存进行隔离。
在我们配置sessionDao的时候,通常会配置如下文件:

	<property name="activeSessionsCacheName" value="${shiro.cache.activeUserCacheName}"></property>
	<property name="cacheManager" ref="shiroCacheManager"></property>

其中,activeSessionsCacheName就是缓存管理器中,保存会话缓存的名称。

对于reaml而言,通常做如下配置:

		<property name="authenticationCacheName" value="${shiro.cache.infoCacheName}"></property>
		<property name="authorizationCacheName" value="${shiro.cache.permissionCacheName}"></property>

其中,authenticationCacheName就是缓存管理器中,保存用户授权信息缓存的名称,authorizationCacheName则为用户权限信息缓存的名称。

这三个缓存虽然使用同一个缓存管理器,但是通过名称进行了隔离。

登录流程

传入token
用户登录
用户信息缓存存在?
密码匹配
调用realm.doGetAuthenticationInfo方法获取用户授权信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值