最简单和最常见的方式来执行授权是直接以编程方式与当前Subject实例交互。
基于角色授权
Rolechecks(角色检查)
如果你只是简单的想检查当前的Subject是否拥有一个角色,你可以在Subject实例上调用hasRole方法。例如:
SubjectcurrentUser=SecurityUtils.getSubject();
if(currentUser.hasRole("administrator")){
//showtheadminbutton
}else{
//don'tshowthebutton?Greyitout?
}
|
相关的角色检查方法如下:
Subject方法
|
描述
|
hasRole(StringroleName)
|
返回true如果Subject被分配了指定的角色,否则返回false。
|
hasRoles(List<String>roleNames)
|
返回true如果Subject被分配了所有指定的角色,否则返回false。
|
hasAllRoles(Collection<String>roleNames)
|
返回一个与方法参数中目录一致的hasRole结果的数组。
|
RoleAssertions(角色断言)
Shiro还支持以断言的方式进行授权验证。断言成功,不返回任何值,程序继续执行;断言失败时,将抛出异常信息AuthorizationException。例如:
SubjectcurrentUser=SecurityUtils.getSubject();
//guaranteethatthecurrentuserisabanktellerand
//thereforeallowedtoopentheaccount:
currentUser.checkRole("bankTeller");
openBankAccount();
|
相关的断言检查方法如下:
Subject方法
|
描述
|
checkRole(StringroleName)
|
安静地返回,如果Subject被分配了指定的角色,不然的话就抛出。
|
checkRoles(Collection<String>roleNames)
|
安静地返回,如果Subject被分配了所有的指定的角色,不然的话就抛出。
|
checkRoles(String...roleNames)
|
与上面的checkRoles方法的效果相同,但允许Java5的var-args类型的参数。
|
基于权限授权
相比传统角色模式,基于权限的授权模式耦合性要更低些,它不会因角色的改变而对源代码进行修改,因此,基于权限的授权模式是更好的访问控制方式。
如果你想进行检查,看一个Subject是否被允许做某事,你可以调用各种isPermitted*方法的变种。检查权限主要有两个方式——基于对象的权限实例或代表权限的字符串。
Object-basedPermissionChecks(基于对象的权限检查)
执行权限检查的一个可行方法是实例化org.apache.shiro.authz.Permission接口的一个实例,并把它传递给接收权限实例的*isPermitted方法。比如,在办公室有一台打印机,具有唯一标识符laserjet4400n。我们的软件需要检查当前用户是否被允许在该打印机上打印文档。上述情况的权限检查可以明确地像这样表达:
PermissionprintPermission=newPrinterPermission("laserjet4400n","print");
SubjectcurrentUser=SecurityUtils.getSubject();
If(currentUser.isPermitted(printPermission)){
//showthePrintbutton
}else{
//don'tshowthebutton?Greyitout?
}
|
相关的验证方法如下:
Subject方法
|
描述
|
isPermitted(Permissionp)
|
返回true如果该Subject被允许执行某动作或访问被权限实例指定的资源集合,否则返回false。
|
isPermitted(List<Permission>perms)
|
返回一个与方法参数中目录一致的isPermitted结果的数组。
|
isPermittedAll(Collection<Permission>perms)
|
返回true如果该Subject被允许所有指定的权限,否则返回false。
|
String-basedpermissionchecks(基于字符串的权限检查)
基于对象的权限可以是很有用的(编译时类型安全,保证行为,定制蕴含逻辑等),但它们有时对应用程序来说会感到有点“笨手笨脚”的。另一种方法是使用正常的字符串来表示权限实例。例如上述的例子使用基于字符串的权限检查如下:
SubjectcurrentUser=SecurityUtils.getSubject();
if(currentUser.isPermitted("printer:print:laserjet4400n")){
//showthePrintbutton
}else{
//don'tshowthebutton?Greyitout?
}
|
这个例子显示了一个特殊冒号分隔的格式,它由Shiro默认的org.apache.shiro.authz.permission.WildcardPermission实现来定义的。这里分别代表了:资源类型:操作:资源ID。WildcardPermissiontoken规定和构造操作的格式在Shiro的Permission文档中被深入的涉及到。除了上面的字符串默认的WildcardPermission格式,你可以创建和使用自己的字符串格式如果你喜欢的话。
相关的验证方法如下:
Subject方法
|
描述
|
isPermitted(Stringperm)
|
返回true如果该Subject被允许执行某动作或访问被字符串权限指定的资源,否则返回false。
|
isPermitted(String…perms)
|
返回一个与方法参数中目录一致的isPermitted结果的数组。
|
isPermittedAll(String…perms)
|
返回true如果该Subject被允许所有指定的字符串权限,否则返回false。
|
PermissionAssertions(权限断言)
以断言的方式进行授权验证。断言成功,不返回任何值,程序继续执行;断言失败时,将抛出异常信息AuthorizationException。例如:
SubjectcurrentUser=SecurityUtils.getSubject();
//guaranteethatthecurrentuserispermitted
//toopenabankaccount:
Permissionp=newAccountPermission("open");
currentUser.checkPermission(p);
openBankAccount();
|
或者使用字符串来检查权限:
SubjectcurrentUser=SecurityUtils.getSubject();
//guaranteethatthecurrentuserispermitted
//toopenabankaccount:
currentUser.checkPermission("open");
openBankAccount();
|
相关的断言方法如下:
Subject方法
|
描述
|
checkPermission(Permissionp)
|
安静地返回,如果Subject被允许执行某动作或访问被特定的权限实例指定的资源,不然的话就抛出AuthorizationException异常。
|
checkPermission(Stringperm)
|
安静地返回,如果Subject被允许执行某动作或访问被特定的字符串权限指定的资源,不然的话就抛出AuthorizationException异常。
|
checkPermissions(Collection<Permission>perms)
|
安静地返回,如果Subject被允许所有的权限,不然的话就抛出AuthorizationException异常。
|
checkPermissions(String…perms)
|
和上面的checkPermissions方法效果相同,但是使用的是基于字符串的权限。
|
分享到:
相关推荐
Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,简化了企业级应用的安全实现。Shiro 1.13.0 是其一个重要的版本,包含了多项更新和改进。在这个版本中,开发者可以深入理解其...
Shiro 支持角色和权限两种模式,可以通过配置或编程方式为用户分配角色和权限。 3. 加密(Cryptography):Shiro 提供了一些加密工具类,如密码散列、消息摘要等,用于安全地存储敏感数据,如密码。 4. 会话管理...
Apache Shiro是一个强大且易用的安全管理框架,用于身份验证、授权、会话管理和加密。在仓库管理系统中,Shiro可以实现用户登录验证、角色权限分配、访问控制等功能,确保只有经过认证和授权的用户才能访问特定的...
Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证、授权、加密和会话管理等功能。Shiro 的架构主要包括三个核心组件:Subject、SecurityManager 和 Realm。 1. 认证(Authentication):用户身份识别,常...
Apache Shiro是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,可以简化开发人员处理安全的复杂性。Shiro适用于各种应用,从小型独立应用到大型分布式系统,都能有效地支持。 在"shiro-...
Apache Shiro是一个开源的安全框架,它提供了一套简单的API来处理身份验证、授权、会话管理和加密。Shiro的功能强大且灵活,目标是使安全任务的处理变得简单易行。 首先,Shiro的介绍部分涵盖了基本概念和术语,如...
Shiro允许开发者通过配置或编程方式定义角色(Role)和权限(Permission),然后将它们分配给用户。一旦用户被授予了某个角色,他就能执行该角色所关联的所有权限。 3. **会话管理**:Shiro可以帮助管理用户的会话...
1. **org.apache.shiro.aop**: 这个模块提供了面向切面的安全编程支持。AOP(Aspect-Oriented Programming)允许开发者在不修改代码的情况下添加安全控制,通过定义切点和通知来实现。 2. **org.apache.shiro....
在实际使用中,Apache Shiro可以通过简单的配置或编程方式集成到Spring、Struts等其他Java应用框架中。其API设计直观,使得开发者可以快速上手并定制适合自身应用的安全策略。 通过阅读《Apache Shiro_安全框架开发...
Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密服务。这个"shiro1.7.1全包修补漏洞.rar"文件包含了针对Apache Shiro 1.7.1版本的一些安全修复和更新,旨在解决可能存在的...
Apache Shiro是一款强大的安全框架,它简化了身份验证、授权、会话管理和加密等安全相关的任务。Shiro可以轻松集成到Spring MVC应用中,为用户提供认证(登录验证)、授权(权限控制)和会话管理功能。例如,通过...
Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、会话管理和加密等功能,使得在Java应用中处理安全性变得更加简单。在这个“apache shiro整合struts2+spring+mybatis简单demo”中,我们将探讨如何将...
**Apache Shiro** 是一个强大且易用的Java安全框架,专注于身份验证(Authentication)、授权(Authorization)和会话管理(Session Management)。Shiro可以帮助开发者轻松实现用户的登录验证、权限控制以及会话...
Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份认证、授权、会话管理和加密等全面的安全服务。对于开发者来说,通过学习 Shiro 的源码,可以深入理解其内部工作原理,提高安全编程的能力。在这个 Shiro...
Apache Shiro是一个安全管理框架,负责认证、授权(权限控制)、加密和会话管理。在仓库管理系统中,Shiro用于用户身份验证和权限控制,确保只有授权的用户才能访问特定的系统资源。例如,管理员可以查看所有库存,...
Apache Shiro是一个广泛使用的Java安全框架,它为身份验证、授权、加密以及会话管理提供了易于使用的API,同时支持JavaSE和JavaEE环境。Shiro的简单和直接让它在开发社区中备受欢迎,尤其对于那些不希望在安全领域...
总之,Apache Shiro 提供了一套完整的安全解决方案,通过简单的配置和编程接口,可以帮助开发者快速实现权限管理功能。结合 Spring,可以更方便地集成到现有的企业级应用中,提高开发效率。本文提供的入门实例是一个...
Apache Shiro是一个开源的Java安全框架,它以简单易用的方式提供认证、授权、会话管理以及加密等功能。Shiro是Apache软件基金会的顶级项目之一,它支持多种安全数据源,例如LDAP、关系型数据库、INI文件等,并且可以...
Apache Shiro 是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,简化了企业级应用的安全实现。本项目“shirodemo”将结合Spring3框架,展示如何有效地进行用户认证和权限控制。 **1. ...
Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证(Authentication)、授权(Authorization)以及会话管理(Session Management)等功能。本课程旨在通过实战演练和项目案例,帮助学习者深入理解...