leftso 375 0 2019-08-29 09:17:41

文章位置:左搜> 编程技术> Java编程技术> 正文

故事

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

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

问题解决思路



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

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

首先runAs方法来自shiro的subject对象
 ShiroUtils.getSubjct().runAs(new SimplePrincipalCollection(swUser, ""));
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(仅作参考);
 

评论区域

暂无评论,快来抢首发吧!!!