Shiro学习(21)授予身份及切换身份

本文介绍了如何使用Shiro的RunAs功能实现代理身份访问。通过建立UserRunAs实体,实现用户间身份的授予、回收和切换。详细讲解了相关DAO、Service和Web控制器的实现,以及身份切换的API使用,包括Subject.isRunAs()和Subject.getPreviousPrincipals()等方法。示例代码展示了身份授权、回收和切换的实际操作流程。
摘要由CSDN通过智能技术生成

在一些场景中,比如某个领导因为一些原因不能进行登录网站进行一些操作,他想把他网站上的工作委托给他的秘书,但是他不想把帐号/密码告诉他秘书,只是想把工作委托给他;此时和我们可以使用Shiro的RunAs功能,即允许一个用户假装为另一个用户(如果他们允许)的身份进行访问。

本章代码基于《第十六章 综合实例》,请先了解相关数据模型及基本流程后再学习本章。

表及数据SQL
请运行shiro-example-chapter21/sql/ shiro-schema.sql 表结构
请运行shiro-example-chapter21/sql/ shiro-schema.sql 数据

实体

具体请参考com.github.zhangkaitao.shiro.chapter21包下的实体。
Java代码 收藏代码
public class UserRunAs implements Serializable {
private Long fromUserId;//授予身份帐号
private Long toUserId;//被授予身份帐号
}
该实体定义了授予身份帐号(A)与被授予身份帐号(B)的关系,意思是B帐号将可以假装为A帐号的身份进行访问。

DAO
具体请参考com.github.zhangkaitao.shiro.chapter21.dao包下的DAO接口及实现。

Service
具体请参考com.github.zhangkaitao.shiro.chapter21.service包下的Service接口及实现。
Java代码 收藏代码
public interface UserRunAsService {
public void grantRunAs(Long fromUserId, Long toUserId);
public void revokeRunAs(Long fromUserId, Long toUserId);
public boolean exists(Long fromUserId, Long toUserId);
public List findFromUserIds(Long toUserId);
public List findToUserIds(Long fromUserId);
}
提供授予身份、回收身份、关系存在判断及查找API。

Web控制器RunAsController
该控制器完成:授予身份/回收身份/切换身份功能。

展示当前用户能切换到身份列表,及授予给其他人的身份列表:
Java代码

@RequestMapping  
public String runasList(@CurrentUser User loginUser, Model model) {  
    model.addAttribute("fromUserIds",   
        userRunAsService.findFromUserIds(loginUser.getId()));  
    model.addAttribute(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值