一、授权的基本概念
授权,也叫访问控制,是指在应用中控制谁能访问哪些资源(如访问页面、编辑数据、页面操作等)。在Shiro中,授权涉及几个关键对象:主体(Subject)、资源(Resource)、权限(Permission)和角色(Role)。
- 主体(Subject):访问应用的用户,在Shiro中使用Subject代表该用户。用户只有授权后才允许访问相应的资源。
- 资源(Resource):在应用中用户可以访问的URL,比如访问JSP页面、查看/编辑某些数据、访问某个业务方法、打印文本等都是资源。用户只有授权后才能访问。
- 权限(Permission):安全策略中的原子授权单位,通过权限可以表示在应用中用户有没有操作某个资源的权力。例如,访问用户列表页面查看/新增/修改/删除用户数据(即很多时候都是CRUD式权限控制)等。Shiro支持粗粒度权限(如用户模块的所有权限)和细粒度权限(操作某个用户的权限,即实例级别的)。
- 角色(Role):权限的集合,一般情况下会赋予用户角色而不是权限,这样用户可以拥有一组权限,赋予权限时比较方便。典型的如项目经理、技术总监、CTO、开发工程师等都是角色,不同的角色拥有一组不同的权限。
二、Shiro授权的方式
Shiro提供了多种授权方式,以满足不同的应用需求。以下是几种常见的授权方式:
- 基于角色的授权(Role-Based Authorization):通过给用户分配不同的角色,来控制用户对资源的访问权限。例如,可以定义一个“admin”角色,只有拥有该角色的用户才能执行某些操作。
- 基于权限的授权(Permission-Based Authorization):通过给用户分配具体的权限,来控制用户对资源的访问权限。例如,可以定义一个“write”权限,只有拥有该权限的用户才能进行写操作。
- 自定义授权(Custom Authorization):Shiro框架允许用户通过自定义的方式进行授权。可以实现自己的授权逻辑,判断用户是否有权限执行某个操作。
- 通配符授权(Wildcard Authorization):Shiro框架支持使用通配符进行授权。可以使用通配符匹配多个角色或权限。例如,可以使用“role:*”表示拥有任何角色的用户都有权限。
- 基于资源的授权(Resource-Based Authorization):Shiro框架支持基于资源的授权,也称为ACL(Access Control List)授权。通过给每个资源分配访问权限,可以精细地控制用户对不同资源的访问。
三、Shiro授权的执行流程
Shiro授权的执行流程通常包括以下几个步骤:
- 调用Subject接口:首先调用Subject的isPermitted或hasRole接口进行权限或角色检查。
- 委托给SecurityManager:Subject接口会委托给全局唯一的SecurityManager进行权限验证。
- 委托给Authorizer:SecurityManager会进一步委托给Authorizer进行真正的授权判断。
- Permission Resolver转换:如果调用的是isPermitted接口,Authorizer会首先通过Permission Resolver把字符串转换成相应的Permission实例。
- 获取角色/权限信息:在进行授权之前,Authorizer会调用相应的Realm获取Subject相应的角色/权限信息。
- 匹配角色/权限:Authorizer会判断Realm的角色/权限是否和传入的匹配。如果有多个Realm,会委托给ModularRealmAuthorizer进行循环判断。
- 返回结果:如果匹配成功,则返回true表示授权通过;否则返回false表示授权失败。
四、Shiro授权的示例代码
以下是一个简单的Shiro授权示例代码,展示了如何通过编程式、注解式和标签式三种方式进行授权检查:
- 编程式授权:
if(subject.hasRole("admin")){ // 有权限执行后续操作 }else{ // 无权限执行后续操作 }
- 注解式授权:
@RequiresRoles("admin") public void doSomething(){ // 只有拥有admin角色的用户才能执行此方法 }
- 标签式授权(在JSP/GSP页面中):
<shiro:hasRole name="admin"> <!-- 有权限显示的内容 --> </shiro:hasRole>
术语简介
一、计算机与信息技术
-
Apache Shiro
- 定义:Apache Shiro是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。
- 关键组件:包括Subject(主体)、SecurityManager(安全管理器)、Realm(域)等。
- 应用:广泛应用于Java Web应用和其他需要安全控制的领域。
-
认证(Authentication)
- 定义:验证用户身份的过程,即证明某人确实是他所声称的那个人。
- 过程:通常涉及用户提交凭证(如用户名和密码),系统验证这些凭证的有效性。
- 应用:在登录系统、访问控制等场景中广泛应用。
-
授权(Authorization)
- 定义:决定用户是否有权访问特定资源或执行特定操作的过程。
- 关键对象:包括主体(Subject)、资源(Resource)、权限(Permission)和角色(Role)。
- 应用:用于控制用户对应用中的页面、数据、操作等的访问权限。
-
加密(Cryptography)
- 定义:使用密码学算法对数据进行加密和解密的过程。
- 目的:保护数据的安全性,防止未经授权的访问或篡改。
- 应用:在数据传输、存储等场景中广泛应用。
-
哈希(Hash)
- 定义:一种对数据进行单向、不可逆的运算过程,通常用于生成数据的唯一标识。
- 特点:哈希值具有固定长度,且对于不同的输入数据,哈希值通常不同。
- 应用:在密码存储、数据完整性校验等场景中广泛应用。
二、商业与管理
-
市场营销(Marketing)
- 定义:企业为了满足消费者需求,通过市场研究、产品开发、定价、促销和分销等活动来创造、传播和传递价值给顾客的过程。
- 关键要素:包括产品、价格、促销和地点(分销)。
- 应用:在各行各业中,市场营销都是企业获取竞争优势的重要手段。
-
供应链管理(Supply Chain Management, SCM)
- 定义:对企业内外部资源进行优化配置,以满足客户需求的过程。它涵盖了从原材料采购、生产制造、物流配送到售后服务的全过程。
- 关键要素:包括供应商、制造商、分销商、零售商和最终用户等。
- 应用:在制造业、零售业等行业中,供应链管理对于提高效率和降低成本至关重要。
-
风险管理(Risk Management)
- 定义:识别、评估和控制可能影响组织目标实现的风险的过程。
- 关键步骤:包括风险识别、风险评估、风险控制和风险监控等。
- 应用:在金融、保险、制造业等多个行业中,风险管理都是确保组织稳健运营的重要手段。
三、科学与工程
-
量子力学(Quantum Mechanics)
- 定义:描述微观物质世界(如原子和亚原子粒子)行为的基础物理学理论。
- 关键概念:包括波粒二象性、不确定性原理、量子态等。
- 应用:在半导体技术、量子计算、量子通信等领域具有广泛应用。
-
人工智能(Artificial Intelligence, AI)
- 定义:研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
- 关键技术:包括机器学习、深度学习、自然语言处理等。
- 应用:在智能家居、自动驾驶、医疗诊断等多个领域具有广泛应用前景。
授权流程
一、身份认证
- 用户提交凭证:用户需要向系统提交身份验证的凭证,如用户名和密码、数字证书、生物识别信息等。
- 系统验证凭证:系统会根据用户提交的凭证,通过相应的验证机制(如数据库查询、加密算法比对等)来判断用户的身份是否合法。
- 生成会话信息:如果用户的身份被验证为合法,系统会为用户生成一个唯一的会话ID或令牌(Token),并将会话信息与用户身份关联起来,以便在后续的请求中识别用户。
二、权限获取
- 查询权限信息:在身份验证成功后,系统会根据用户的身份(如用户名、角色等)去查询该用户所拥有的权限信息。
- 构建权限对象:系统会将查询到的权限信息构建成相应的权限对象,这些对象通常包含了用户能够访问的资源列表、能够执行的操作列表等。
三、授权判断
- 用户发起请求:用户在系统中发起对某个资源或操作的请求。
- 系统检查权限:系统会根据用户发起的请求,以及用户当前会话中的权限信息,来判断用户是否有权访问该资源或执行该操作。
- 返回授权结果:系统会将授权判断的结果返回给用户或应用程序。如果用户有权限,则允许其访问资源或执行操作;如果用户无权限,则拒绝其访问或执行,并可能给出相应的提示信息。
四、会话管理
- 会话维护:在用户与系统的交互过程中,系统会维护用户的会话信息,包括会话ID、会话有效期、用户状态等。
- 会话过期处理:如果用户的会话过期(如长时间未操作、会话超时等),系统会要求用户重新进行身份验证,以恢复会话。
- 会话注销:当用户主动退出系统或会话结束时,系统会注销用户的会话信息,以确保系统的安全性。
五、日志记录与审计
- 记录日志:在授权流程的各个阶段,系统都会记录相应的日志信息,包括用户身份验证的时间、权限查询的结果、授权判断的结果等。
- 审计分析:系统管理员或安全人员可以通过查看日志信息,对系统的授权流程进行审计和分析,以确保系统的安全性和合规性。
授权方式
一、按领导风格划分的授权方式
-
一般授权(柔性授权)
- 特点:领导者对下属的工作仅做一般的指点,并没有给下属具体的工作权限范围,也没有通过正式的文件规定下属的决策内容和方式。在实际的管理过程中,经常让下属以自己的名义和权限从事管理活动。
- 优点:灵活性高,能够适应快速变化的环境。
- 缺点:可能导致下属权限不明确,决策效率较低。
-
特定授权(刚性授权)
- 特点:领导者通过正式的文件,对所授权力、责任、完成任务的要求、时间等均有明确的规定和交代,被授权者必须严格遵守,不得违背和逾越。
- 优点:权限明确,责任清晰,有利于提高工作效率和保证工作质量。
- 缺点:灵活性较差,难以适应复杂多变的环境。
-
积极授权
- 特点:领导者在对下属精心考评以后,在充分信任的基础上进行授权。并且允许被授权的下属完全由其自己决定行动的方案和创造条件。
- 优点:能够激发下属的积极性和创造力,提高工作效率。
- 缺点:需要领导者对下属有深入的了解和信任,否则可能导致授权失败。
-
消极授权
- 又可以分为惰性授权和被迫授权。
- 惰性授权:领导者在授权的同时缺乏对被授权者必要的监管、控制,放任自流。
- 被迫授权:领导者由于各种原因不得不违心地授权。这种违心的原因有的是由于对下属能力的不信任,有的是由于怕给自己树立竞争者,有的是出于强烈地想控制他人的欲望等。
- 缺点:容易导致授权失控,影响工作效率和质量。
- 又可以分为惰性授权和被迫授权。
二、按授权渠道划分的授权方式
-
口头授权
- 特点:通过口头方式将权力授予下属。
- 优点:方便快捷,适用于紧急或临时性的授权。
- 缺点:缺乏书面记录,可能导致授权内容不明确或产生争议。
-
书面授权
- 特点:通过正式的文件或协议将权力授予下属。
- 优点:具有法律效力,授权内容明确具体,有利于保障双方的权益。
- 缺点:相对繁琐,需要花费一定的时间和精力来准备和签署文件。
-
单方授权
- 特点:由一方单独进行授权,无需另一方同意或确认。
- 优点:操作简单,适用于一方对另一方有绝对控制权的情况。
- 缺点:可能导致授权不公平或不合理,影响双方的关系和合作。
-
多方授权
- 特点:涉及多个主体之间的授权关系,需要各方共同协商和确认。
- 优点:能够平衡各方的利益和需求,促进合作和共赢。
- 缺点:操作复杂,需要花费较多的时间和精力来协商和达成一致意见。
三、其他常见的授权方式(以IP授权为例)
-
衍生品授权
- 特点:将IP的元素直接用于实物商品上。
- 应用:如电影、动漫角色的周边商品等。
-
外包装授权
- 特点:仅将IP元素用于礼盒外包装或物流外包装上,产品本身并不使用IP元素。
- 应用:如食品、化妆品等产品的包装设计。
-
礼赠品授权
- 特点:将IP元素用于赠品上,赠品通常是非卖品。
- 应用:如快餐店的儿童套餐赠品等。
-
营销授权
- 特点:将IP元素用于营销推广上,如营销海报、推广软文等。
- 应用:品牌与IP方的合作推广等。
-
数字虚拟授权
- 特点:将IP元素用于数字虚拟产品上,如表情包、壁纸等。
- 应用:互联网平台的虚拟商品销售等。
-
改编授权
- 特点:将IP改编成其他形式的内容,如动画、电影、游戏等。
- 应用:小说IP改编成动画作品或电影等。
-
线下实体店授权
- 特点:将IP元素用于线下实体店的布展和装饰中。
- 应用:主题餐厅、主题咖啡厅等。
-
公共交通授权
- 特点:将IP元素用于公共交通工具的外部涂装或内部装饰中。
- 应用:公交车、地铁、飞机等交通工具的涂装和装饰。