当前位置: 首页 > article >正文

Shiro 授权(Authorization)总结

Shiro 是一个强大的 Java 安全框架,其中授权(Authorization)是其重要的功能之一,用于控制用户对应用程序资源的访问权限。

一、授权的基本概念

授权是在用户认证通过后,确定用户是否有权访问特定的资源或执行特定的操作。在 Shiro 中,授权主要通过角色和权限来实现。

  • 角色(Role):表示一组相关的权限集合。例如,“管理员”角色可能具有对系统进行管理的一系列权限,如添加用户、删除用户、修改用户信息等。角色可以帮助我们对用户进行分类管理,使得授权更加清晰和易于理解。

  • 权限(Permission):具体的操作许可,如“查看用户列表”、“编辑用户信息”、“删除文档”等。权限通常以一种特定的格式表示,比如“资源:操作”,这样可以更精确地控制用户对不同资源的不同操作权限。

二、Shiro 授权的实现方

  1. 使用注解进行授权

    • 在方法上添加@RequiresRoles@RequiresPermissions等注解来指定访问该方法所需的角色或权限。
    import org.apache.shiro.authz.annotation.RequiresRoles;
    import org.apache.shiro.authz.annotation.RequiresPermissions;
    
    public class SomeService {
        @RequiresRoles("admin")
        public void adminMethod() {
            // 只有具有 "admin" 角色的用户才能访问此方法
        }
    
        @RequiresPermissions("user:view")
        public void viewUserMethod() {
            // 只有具有 "user:view" 权限的用户才能访问此方法
        }
    }
    
  2. 在代码中进行授权判断

    • 通过Subject对象的hasRolehasPermission等方法进行授权判断。
      import org.apache.shiro.SecurityUtils;
      import org.apache.shiro.subject.Subject;
      
      public class AnotherService {
          public void someMethod() {
              Subject subject = SecurityUtils.getSubject();
              if (subject.hasRole("user")) {
                  // 用户具有 "user" 角色时执行的操作
              }
              if (subject.hasPermission("document:read")) {
                  // 用户具有 "document:read" 权限时执行的操作
              }
          }
      }
  3. 在代码中进行授权判断
    1.通过Subject对象的hasRolehasPermission等方法进行授权判断。
    [users]
    admin = password1,adminRole
    user = password2,userRole
    
    [roles]
    adminRole = *
    userRole = user:view,document:read
    
    [urls]
    /admin/* = roles[admin]
    /user/* = roles[user]

 这里定义了两个用户“admin”和“user”,分别具有不同的角色。同时,为不同的角色分配了不同的权限,并在 URL 配置中指定了不同的路径需要不同的角色才能访问。

三、授权流程

  1. 用户进行认证,认证通过后获取Subject对象。
  2. 在需要进行授权判断的地方,使用注解或代码中的授权判断方法,或者根据配置文件中的规则进行授权判断。
  3. Shiro 根据用户的角色和权限信息,决定用户是否有权访问特定的资源或执行特定的操作。如果用户具有所需的角色或权限,则允许访问;否则,抛出相应的异常或拒绝访问。

四、授权的优势和应用场景

  1. 优势

    • 灵活性:可以根据不同的业务需求,灵活地定义角色和权限,实现细粒度的访问控制。
    • 可维护性:通过集中管理角色和权限,使得授权规则的修改和维护更加方便。
    • 安全性:有效地防止未经授权的访问,保护应用程序的资源安全。
  2. 应用场景

    • 企业级应用:对于企业内部的管理系统,不同的用户角色可能具有不同的操作权限,如管理员可以进行系统设置和用户管理,普通员工只能查看和编辑自己的工作任务。
    • 电子商务平台:商家和消费者具有不同的权限,商家可以管理商品信息和订单,消费者可以浏览商品和下单购买。
    • 社交网络平台:不同的用户角色可能具有不同的访问权限,如普通用户可以查看公开内容,会员用户可以查看更多的专属内容。

总之,Shiro 的授权功能为 Java 应用程序提供了强大而灵活的访问控制机制,可以有效地保护应用程序的资源安全。通过合理地定义角色和权限,并结合不同的授权实现方式,可以满足各种复杂的业务需求。


http://www.kler.cn/news/362499.html

相关文章:

  • rust grpc demo
  • 基于单片机的智能小区门禁系统设计(论文+源码)
  • Linux-基础命令及相关知识2
  • 【Qt】控件——Qt多元素控件、常见的多元素控件、多元素控件的使用、List Widget、Table Widget、Tree Widget
  • 【牛客刷题】笔记2
  • RabbitMQ 发布确认模式
  • swagger讲解
  • 集群Spring定时只执行一次
  • 查收查引常用数据库——万方
  • 矩阵基础知识
  • Docker容器间链路管理
  • C++学习笔记----9、发现继承的技巧(二)---- 重用目的的继承
  • 数据库产品中审计与日志(Auditing and Logging)的功能简介
  • kebuadm部署k8s集群
  • 智联云采 SRM2.0 testService SQL注入漏洞复现
  • 【软件测试: jmeter工具】OS进程取样器调用python
  • 【算法】KMP字符串匹配算法
  • redis未授权访问
  • QExcel 保存数据 (QtXlsxWriter库 编译)
  • JMeter 动态参数赋值实践
  • Docker 安装Postgres和PostGIS,并制作镜像
  • centos系统防火墙SELinux设置指令
  • TensorFlow:强大的机器学习框架
  • Vue3获取ref元素的几种方式
  • 海报在线制作系统小程序源码
  • vue 页面导出gif图片 img 导出gif 超简单~ 可修改播放速度