下面详细介绍在进行授权时,Shiro的内部处理机制。
如上图,我们通过Shiro架构图的授权部分,来说明Shiro授权内部的处理顺序:
1.应用程序或框架代码调用任何Subject的hasRole*,checkRole*,isPermitted*,或者checkPermission*方法的变体,传递任何所需的权限或角色内容。
2.Subject的实例,通常是DelegatingSubject(或子类)代表应用程序的SecurityManager通过调用securityManager的各自相同的hasRole*,checkRole*,isPermitted*,或checkPermission*方法的变体(SecurityManager实现org.apache.shiro.authz.Authorizer接口,他定义了所有Subject具体的授权方法)。
3.SecurityManager,作为一个基本的“保护伞”组件,接替/代表它内部的org.apache.shiro.authz.Authorizer实例通过调用authorizer各自的hasRole*,checkRole*,isPermitted*,或者checkPermissions*方法。默认情况下,authorizer实例是一个ModularRealmAuthorizer实例,它支持协调任何授权操作过程中的一个或多个Realm实例。
4.每个配置好的Realm被检查是否实现了相同的Authorizer接口。如果是,Realm各自的hasRole*,checkRole*,isPermitted*,或checkPermission*方法将被调用。
如前所述,ShiroSecurityManager的默认实现是使用一个ModularRealmAuthorizer实例。ModularRealmAuthorizer同样支持单一的Realm,以及多个Realm的应用。
对于任何授权操作,ModularRealmAuthorizer将遍历其内部的Realm集合,并按顺序与每一个进行交互。每个Realm的交互功能如下:如果Realm自己实现了Authorizer接口,它的各个Authorizer方法(hasRole*,checkRole*,isPermitted*,或checkPermission*)将被调用;如果Realm不实现Authorizer接口,它会被忽略。
当存在多个Realms时,ModularRealmAuthorizer根据SecurityManager的配置获得对Realm实例的访问。当执行授权操作时,它会遍历该集合,同时对于每一个自己实现Authorizer接口的Realm,调用Realm各自的Authorizer方法(如hasRole*,checkRole*,isPermitted*,或checkPermission*)。
如果Realm的方法导致异常,该异常将会以AuthorizationException的形式传递给调用者。同时任何剩余的Realm将不会被该授权操作所访问。如果该Realm的方法是一个返回布尔值的hasRole*或者isPermitted*的变体,并且该返回值为true,真值将会立即被返回,同时任何剩余的Realm都将不会访问。这种处理是作为提高性能的一种行为。
当执行基于字符串的权限检查时,Shiro默认实现是将该字符串转换成一个实际的Permission实例。所有ShiroRealm的默认实现是内部的WildcardPermissionResolver,它采用Shiro的WildcardPermission字符串格式。你也可以创建自己的PermissionResolver的实现,支持自己的权限字符串语法。可以将你的PermissionResolver设置为全局的。例如:
globalPermissionResolver=com.foo.bar.authz.MyPermissionResolver
…
securityManager.authorizer.permissionResolver=$globalPermissionResolver
...
|
也可以为特定的Realm设置自己创建的PermissionResolver。例如:
permissionResolver=com.foo.bar.authz.MyPermissionResolver
realm=com.foo.bar.realm.MyCustomRealm
realm.permissionResolver=$permissionResolver
...
|
与PermissionResolver有相似概念的RolePermissionResolver通过角色执行权限检查。RolePermissionResolver的关键区别是输入的字符串是一个角色名,而不是一个权限字符串。
在Shiro中授权有3种方式:
l编写代码——你可以在你的Java代码中用像if和else块的结构执行授权检查。
lJDK的注解——你可以添加授权注解给你的Java方法。
lJSP/GSP标签库——你可以控制基于角色和权限的JSP或者GSP页面输出。
分享到:
相关推荐
Apache Shiro 是一款功能强大且易于使用的 Java 安全框架,它提供了多种安全相关的功能和服务,包括但不限于认证、授权、加密和会话管理。相较于其他安全框架,Shiro 在设计上更为简洁明了,便于开发者的理解和使用...
- **定义**:Apache Shiro 是一款强大且灵活的开源安全框架,它致力于简化应用程序的安全性问题,包括身份验证(Authentication)、授权(Authorization)、会话管理(Session Management)以及加密(Cryptography)...
授权过程涉及以下几个步骤: 1. **确定用户权限**:通过 Realm 获取用户的权限信息。 2. **创建 Authorizer**:利用 Shiro 的 Authorizer 实现访问控制。 3. **执行访问控制**:根据用户权限判断用户是否有权访问...
### Apache Shiro:全方位守护应用安全 #### 一、Apache Shiro概述 **Apache Shiro**(发音为“shee-roh”,意为日语中的“堡垒”)是一款功能强大且易于使用的Java安全框架,旨在为各类应用提供全面的安全保障。...
Apache Shiro是一款轻量级的安全框架,用于处理身份认证、授权、会话管理和加密。在Spring MVC应用中,Shiro可以轻松地集成,提供用户登录、权限控制等功能。例如,它可以验证用户凭证,确保只有授权的用户才能访问...
Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份认证、授权、加密和会话管理功能,简化了处理安全性的工作。在本文中,我们将深入探讨 Apache Shiro 的核心概念及其最简单的整合方式。 一、Shiro 的核心...
Apache Shiro是一款强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密等核心功能。在本文中,我们将深入探讨Apache Shiro的基础配置和代码实现,以帮助你理解如何有效地使用Shiro进行权限控制...
Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了认证、授权、加密和会话管理功能,可以非常方便地为应用程序提供安全保障。本文档合集包含了多个 PDF 文件,全面覆盖了 Apache Shiro 的核心概念和使用方法...
Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密服务。在1.7.0之前的版本中,Shiro存在一个严重的安全漏洞,这个漏洞允许攻击者通过精心构造的请求执行任意系统命令,对...
为了开始这个集成过程,你需要配置Apache Oltu作为OAuth2服务器,并设置Shiro作为安全层。这通常涉及到以下步骤: 1. 配置Oltu服务器端,包括定义授权端点、令牌端点以及客户端信息。 2. 实现Shiro Realm,用于处理...
Apache Shiro 是一款强大且灵活的开源安全框架,旨在简洁地解决身份验证(Authentication)、授权(Authorization)、会话管理(Session Management)以及加密(Cryptography)等问题。它的主要目标是让用户能够轻松...
Shiro授权功能会判断用户是否被授予了特定的安全角色,并决定用户是否有权执行操作。 3. 会话管理(Session Management):Shiro不仅支持Web应用中的会话管理,也能在无Web环境(如桌面应用)中管理用户会话。Shiro...
Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、加密和会话管理功能,为开发人员构建安全的应用程序提供了便利。标题"shiro1.7.1.zip"表明这是Apache Shiro的一个版本更新,从1.3.2升级到1.7.1。...
Apache Shiro 是一个强大且易用的Java安全框架,提供了身份验证、授权、加密和会话管理功能,简化了企业级应用的安全实现。在本文中,我们将深入探讨Apache Shiro 1.6版本的重要更新,以及它如何修复了一个绕过认证...
Apache Shiro是一款功能丰富的开源安全框架,它为身份验证、授权、会话管理和加密提供了一套简洁直观的API,帮助开发者更容易地让应用程序实现安全功能。Shiro的设计目标是降低安全操作的复杂性,即使是复杂的概念也...
Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用。Shiro 1.10.0 版本是该框架的一个稳定版本,包含了自上个版本以来的一些改进和新特性。...
Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证、授权、加密和会话管理等功能。Shiro 的架构主要包括三个核心组件:Subject、SecurityManager 和 Realm。 1. 认证(Authentication):用户身份识别,常...
本项目基于"Spring Boot+Maven+Spring Data JPA+apache Shiro+Easyui",这些技术栈的选择旨在简化开发过程,提供强大的功能,并确保系统的安全性和用户体验。 1. **Spring Boot**: Spring Boot是Spring框架的简化版...
Apache Shiro是一个强大的安全框架,提供了认证、授权、会话管理和加密等功能。在本项目中,Shiro负责系统的权限管理,包括用户的登录验证、角色权限分配、访问控制等,确保只有经过身份验证和授权的用户才能访问...
Apache Shiro是一个开源的安全框架,它提供了一套简单的API来处理身份验证、授权、会话管理和加密。Shiro的功能强大且灵活,目标是使安全任务的处理变得简单易行。 首先,Shiro的介绍部分涵盖了基本概念和术语,如...