`
peterwanghao
  • 浏览: 128348 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Apache Shiro 授权过程

 
阅读更多

下面详细介绍在进行授权时,Shiro的内部处理机制。

如上图,我们通过Shiro架构图的授权部分,来说明Shiro授权内部的处理顺序:

1.应用程序或框架代码调用任何SubjecthasRole*,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,它采用ShiroWildcardPermission字符串格式。你也可以创建自己的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代码中用像ifelse块的结构执行授权检查。

lJDK的注解——你可以添加授权注解给你的Java方法。

lJSP/GSP标签库——你可以控制基于角色和权限的JSP或者GSP页面输出。



分享到:
评论

相关推荐

    Apache_Shiro_使用手册(一)Shiro架构介绍

    Apache Shiro 是一款功能强大且易于使用的 Java 安全框架,它提供了多种安全相关的功能和服务,包括但不限于认证、授权、加密和会话管理。相较于其他安全框架,Shiro 在设计上更为简洁明了,便于开发者的理解和使用...

    Apache Shiro中文开发文档.pdf

    - **定义**:Apache Shiro 是一款强大且灵活的开源安全框架,它致力于简化应用程序的安全性问题,包括身份验证(Authentication)、授权(Authorization)、会话管理(Session Management)以及加密(Cryptography)...

    Apache Shiro中文版使用手册

    授权过程涉及以下几个步骤: 1. **确定用户权限**:通过 Realm 获取用户的权限信息。 2. **创建 Authorizer**:利用 Shiro 的 Authorizer 实现访问控制。 3. **执行访问控制**:根据用户权限判断用户是否有权访问...

    让Apache Shiro保护你的应用

    ### Apache Shiro:全方位守护应用安全 #### 一、Apache Shiro概述 **Apache Shiro**(发音为“shee-roh”,意为日语中的“堡垒”)是一款功能强大且易于使用的Java安全框架,旨在为各类应用提供全面的安全保障。...

    spring mvc、apache shiro、mysql 框架搭建,基于maven构建

    Apache Shiro是一款轻量级的安全框架,用于处理身份认证、授权、会话管理和加密。在Spring MVC应用中,Shiro可以轻松地集成,提供用户登录、权限控制等功能。例如,它可以验证用户凭证,确保只有授权的用户才能访问...

    shiro最简单整合版本

    Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份认证、授权、加密和会话管理功能,简化了处理安全性的工作。在本文中,我们将深入探讨 Apache Shiro 的核心概念及其最简单的整合方式。 一、Shiro 的核心...

    Apache shiro权限控制基础配置代码

    Apache Shiro是一款强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密等核心功能。在本文中,我们将深入探讨Apache Shiro的基础配置和代码实现,以帮助你理解如何有效地使用Shiro进行权限控制...

    apache shiro文档

    Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了认证、授权、加密和会话管理功能,可以非常方便地为应用程序提供安全保障。本文档合集包含了多个 PDF 文件,全面覆盖了 Apache Shiro 的核心概念和使用方法...

    Apache-shiro-1.7.0.zip下载

    Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密服务。在1.7.0之前的版本中,Shiro存在一个严重的安全漏洞,这个漏洞允许攻击者通过精心构造的请求执行任意系统命令,对...

    整合Apache Oltu 与 Shiro. 提供一个轻量的OAUTH2应用框架

    为了开始这个集成过程,你需要配置Apache Oltu作为OAuth2服务器,并设置Shiro作为安全层。这通常涉及到以下步骤: 1. 配置Oltu服务器端,包括定义授权端点、令牌端点以及客户端信息。 2. 实现Shiro Realm,用于处理...

    apache shiro 开发文档

    Apache Shiro 是一款强大且灵活的开源安全框架,旨在简洁地解决身份验证(Authentication)、授权(Authorization)、会话管理(Session Management)以及加密(Cryptography)等问题。它的主要目标是让用户能够轻松...

    Apache_Shiro_reference 使用文档(中文版) 共92页.pdf

    Shiro授权功能会判断用户是否被授予了特定的安全角色,并决定用户是否有权执行操作。 3. 会话管理(Session Management):Shiro不仅支持Web应用中的会话管理,也能在无Web环境(如桌面应用)中管理用户会话。Shiro...

    shiro1.7.1.zip

    Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、加密和会话管理功能,为开发人员构建安全的应用程序提供了便利。标题"shiro1.7.1.zip"表明这是Apache Shiro的一个版本更新,从1.3.2升级到1.7.1。...

    shiro1.6版本

    Apache Shiro 是一个强大且易用的Java安全框架,提供了身份验证、授权、加密和会话管理功能,简化了企业级应用的安全实现。在本文中,我们将深入探讨Apache Shiro 1.6版本的重要更新,以及它如何修复了一个绕过认证...

    Apache_Shiro参考手册中文版

    Apache Shiro是一款功能丰富的开源安全框架,它为身份验证、授权、会话管理和加密提供了一套简洁直观的API,帮助开发者更容易地让应用程序实现安全功能。Shiro的设计目标是降低安全操作的复杂性,即使是复杂的概念也...

    Apache shiro1.10.0依赖

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用。Shiro 1.10.0 版本是该框架的一个稳定版本,包含了自上个版本以来的一些改进和新特性。...

    Apache Shiro使用手册 共22页.pdf

    Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证、授权、加密和会话管理等功能。Shiro 的架构主要包括三个核心组件:Subject、SecurityManager 和 Realm。 1. 认证(Authentication):用户身份识别,常...

    Spring Boot+Maven+Spring Data JPA+apache Shiro+Easyui实现通用用户权限管理系统

    本项目基于"Spring Boot+Maven+Spring Data JPA+apache Shiro+Easyui",这些技术栈的选择旨在简化开发过程,提供强大的功能,并确保系统的安全性和用户体验。 1. **Spring Boot**: Spring Boot是Spring框架的简化版...

    spring boot+mybatis+thymeleaf+apache shiro开发面向学习型的后台管理系统

    Apache Shiro是一个强大的安全框架,提供了认证、授权、会话管理和加密等功能。在本项目中,Shiro负责系统的权限管理,包括用户的登录验证、角色权限分配、访问控制等,确保只有经过身份验证和授权的用户才能访问...

    apache shiro中文教程

    Apache Shiro是一个开源的安全框架,它提供了一套简单的API来处理身份验证、授权、会话管理和加密。Shiro的功能强大且灵活,目标是使安全任务的处理变得简单易行。 首先,Shiro的介绍部分涵盖了基本概念和术语,如...

Global site tag (gtag.js) - Google Analytics