shiro用户信息自动更新并删除授权缓存
业务场景
一个权限管理系统下需要切换系统空间,此时需要更新登录用户在不同空间下的用户信息。
一个用户在一个空间下会拥有特定的功能权限,因此切换空间的动作会引起当前登录用户功能权限变更。
思路
通过shiro框架进行登录用户权限管理
- 每个登录用户在shiro中都使用Subject来标识
- 根据subject获取principal
- 将principal反序列化为存储用户信息的POJO对象
- 修改对象中的某项参数达成更新不同空间下用户信息的需求
- 删除用户之前的授权缓存,让下一次鉴权时自动触发授权方法更新用户权限信息
方案
- 通过
SecurityUtils.getSubject()可获取当前登录用户的subject subject.getPrincipal()获取当前登录用户的标识信息- 通过json反序列化获取对象POJO(这一步也可根据之前在
doGetAuthenticationInfo方法中生成的principal进行强转等方式完成 - 通过新的
principal生成PrincipalCollection - 调用
subject.runAs切换身份 - 借助
Authenticator的实现类CachingRealm在登出时执行的doClearCache(PrincipalCollection principals)来清空授权缓存
代码
@Override
public List<TreeVO> switchSystem(Integer appId) {
// 用户切换到指定系统,类似用户切换,将返回新的menus信息
// 需执行用户重新登录/授

本文介绍了一个在权限管理系统中,利用Apache Shiro框架实现在用户切换系统空间时自动更新用户信息并删除授权缓存的解决方案。通过SecurityUtils获取Subject,然后更新principal,创建新的PrincipalCollection,使用runAs方法切换身份,并调用CachingRealm的doClearCache方法清理旧的授权缓存,确保用户权限信息的准确更新。
739

被折叠的 条评论
为什么被折叠?



