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

故事

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

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

问题解决思路

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

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

首先runAs方法来自shiro的subject对象

 ShiroUtils.getSubjct().runAs(new SimplePrincipalCollection(swUser, ""));
Shiro 切换角色身份runAs()_Spring Boot Shiro 角色身份切换
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(仅作参考);
 

原创文章,作者:端木书台,如若转载,请注明出处:https://blog.ytso.com/243660.html

(0)
上一篇 2022年4月11日
下一篇 2022年4月11日

相关推荐

发表回复

登录后才能评论