Shiro--subject

在 Apache Shiro 中,Subject 是一个核心概念,它表示一个当前正在与应用程序交互的用户。这个用户可以是一个真实的人,也可以是一个系统账户或其他安全实体。Subject 是 Shiro 进行身份认证和权限检查的主要接口。

Subject 的作用

  1. 身份认证Subject 表示当前登录的用户或客户端,通过它可以进行登录、登出等身份认证操作。
  2. 权限检查Subject 负责检查当前用户是否拥有特定的权限或角色,从而决定用户是否可以执行某些操作。
  3. 会话管理Subject 可以管理用户的会话状态,包括获取当前用户的信息、会话属性等。

你的示例代码解释

你的示例代码展示了如何使用 Subject 进行登录、角色检查和权限检查。以下是详细解释:

public void testShiro() {
    Subject subject = shiroLogin("jay", "123");
    System.out.println("是否登录成功: " + subject.isAuthenticated());
    System.out.println("是否有管理员角色: " + subject.hasRole("admin"));
    
    try {
        subject.checkRole("coder");
        System.out.println("有coder角色");
    } catch (Exception e) {
        System.out.println("没有coder角色");
    }

    System.out.println("是否能查看订单列表: " + subject.isPermitted("order:list"));
    try {
        subject.checkPermissions("order:add", "order:del");
        System.out.println("有添加和删除订单资源");
    } catch (Exception e) {
        System.out.println("没有添加和删除订单资源");
    }
}

详细解释

  1. 登录操作

Subject subject = shiroLogin("jay", "123");

这行代码通过调用 shiroLogin 方法进行用户登录操作,返回一个 Subject 对象,代表当前登录的用户。

2.检查是否登录成功

System.out.println("是否登录成功: " + subject.isAuthenticated());

通过 subject.isAuthenticated() 方法检查用户是否登录成功。

3.检查是否拥有指定角色: 

System.out.println("是否有管理员角色: " + subject.hasRole("admin"));

使用 subject.hasRole("admin") 检查用户是否具有 admin 角色。

try {
    subject.checkRole("coder");
    System.out.println("有coder角色");
} catch (Exception e) {
    System.out.println("没有coder角色");
}

 使用 subject.checkRole("coder") 检查用户是否具有 coder 角色。如果没有该角色,会抛出异常并进入 catch 块。

4.检查是否具有特定权限

System.out.println("是否能查看订单列表: " + subject.isPermitted("order:list"));

使用 subject.isPermitted("order:list") 检查用户是否具有查看订单列表的权限。 

try {
    subject.checkPermissions("order:add", "order:del");
    System.out.println("有添加和删除订单资源");
} catch (Exception e) {
    System.out.println("没有添加和删除订单资源");
}

 使用 subject.checkPermissions("order:add", "order:del") 检查用户是否具有添加和删除订单的权限。如果没有这些权限,会抛出异常并进入 catch 块。

总结

Subject 是 Shiro 用来表示当前用户或客户端的对象。它提供了一组方法,用于进行身份认证和权限检查。在你的示例代码中,Subject 被用来登录用户、检查用户角色和权限,以及管理用户会话。通过使用 Subject,可以非常方便地控制应用程序中的访问控制逻辑。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值