Shiro 切换角色身份runAs()_Spring Boot Shiro 角色身份切换

编程教程 > Java > Spring (5846) 2024-11-26 14:39:04

故事

        今天遇到了一个问题,就是一个用户属于多个部门,之前的角色是挂在部门下的,也就说处理不同业务需要不同的部门,这里就暂时考虑了在线的用户角色切换,项目中使用的是shiro权限框架。

首先是解决角色切换的思路

问题解决思路



步骤一:
根据当前登录的用户,获取该用户所有的部门+角色。(代码根据各个系统而定,这里不写)

步骤二:
传入选择的角色信息,生成新的认证用户(也就是切换过去的。)需要注意以下几点

首先runAs方法来自shiro的subject对象
 ShiroUtils.getSubjct().runAs(new SimplePrincipalCollection(swUser, ""));
操作示例图-4258fb6851aa4e03ae3a40ae781645a7.png
PrincipalCollection接口实现类

runAs()方法其需要一个参数,PrincipalCollection接口的实现,目前简单的使用就是使用SimplePrincipalCollection类来作为参数,它实现了PrincipalCollection。再创建SimplePrincipalCollection对象过程中,需要注意,SimplePrincipalCollection类有很多构造方法,这里我们用的是
public SimplePrincipalCollection(Object principal, String realmName) 
  • 参数一:   Object principal
  • 参数二:String realmName

注意:参数一中的principal,要与你的Realm中处理登录的SimpleAuthenticationInfo()里面的principal一直。public SimpleAuthenticationInfo(Object principal, Object credentials, String realmName) ;提示:我再Realm中实现登录认证结果返回是使用的SimpleAuthenticationInfo

可能看到了我上面的第二个参数我传的空字符串,因为我是同一个用户切换,所以空字符串也可以,当然指定登录时候SimpleAuthenticationInfo传递的realmName也是可以的。但是注意不能是null。
SimpleAuthenticationInfo
SimpleAuthenticationInfo


处理完毕后就是前台的刷新页面了。可以使用window.location.reload(仅作参考);
 

评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
一、spring boot shiro 无状态token认证项目结构图​二、无状态spring boot shiro相关配置2.1shiro redis 缓存配置首先是实现shiro的cache...
Java编程之spring boot shiro redis整合基于角色和权限的安全管理,Java编程,spring boot,shiro,权限控制
故事        今天遇到了一个问题,就是一个用户属于多个部门,之前的角色是挂在部门下的,也就说处理不同业务需要不同的部门,这里就暂时考虑了在线的用户角色切换,项目中使用的是shiro权限框架
出现@Transactional事务不生效原因shiro 的Realm 中注入了用到事务的service,例如下面的​ /** * 自定义权限认证器 * 自定义实现Realm,实现自定义获取...
引言    通过之前spring boot mybatis 整合的讲解: spring boot mybaties整合  (spring boot mybaties 整合 基于Java注解方式写...
Spring Boot 2.0,Spring框架的Spring Boot 中的Spring Boot Actuator变化讲解。并且了解如何在Spring Boot 2.0中使用Actuator...
Spring Boot 2.0 绑定properties属性资源文件 Spring Boot 2.0 读取properties配置文件值 Spring Boot 2.0获取properties配...
spring boot入门,spring boot是一个崭新的spring框架分支项目,本文讲解其属性配置相关
spring boot 1.5整合redis实现spring的缓存框架,spring boot,redis
spring boot是一个崭新的spring框架分支项目,本文讲解基本的数据库配置
Spring Boot validation整合hibernate validator实现数据验证,Spring Boot validation使用说明,Spring Boot validat...
spring boot mybatis 整合使用讲解介绍,spring boot与MyBatis的使用讲解介绍。spring boot mybatis xml mapper方式的入门和通过一个简...
spring boot又一个spring框架的经典项目,本文讲解spring boot入门的环境配置以及第一个项目,Spring Boot 入门教程
Spring Boot 2.0 Redis整合,通过spring boot 2.0整合Redis作为spring缓存框架的实现。
spring boot 导入本地jar包spring boot maven 打war包时候导入本地jar包