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

Apache Shiro 编程方式授权

 
阅读更多

最简单和最常见的方式来执行授权是直接以编程方式与当前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实现来定义的。这里分别代表了:资源类型:操作:资源IDWildcardPermissiontoken规定和构造操作的格式在ShiroPermission文档中被深入的涉及到。除了上面的字符串默认的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 1.13.0源码

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,简化了企业级应用的安全实现。Shiro 1.13.0 是其一个重要的版本,包含了多项更新和改进。在这个版本中,开发者可以深入理解其...

    shiro最简单整合版本

    Shiro 支持角色和权限两种模式,可以通过配置或编程方式为用户分配角色和权限。 3. 加密(Cryptography):Shiro 提供了一些加密工具类,如密码散列、消息摘要等,用于安全地存储敏感数据,如密码。 4. 会话管理...

    Spring MVC+Mybatis+Ehcache+Apache Shiro+Bootstrap整合开发java仓库管理系统源码

    Apache Shiro是一个强大且易用的安全管理框架,用于身份验证、授权、会话管理和加密。在仓库管理系统中,Shiro可以实现用户登录验证、角色权限分配、访问控制等功能,确保只有经过认证和授权的用户才能访问特定的...

    Apache Shiro使用手册 共22页.pdf

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

    shiro jar包及源码下载

    Apache Shiro是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,可以简化开发人员处理安全的复杂性。Shiro适用于各种应用,从小型独立应用到大型分布式系统,都能有效地支持。 在"shiro-...

    apache shiro中文教程

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

    Apache_Shiro参考手册中文版_shiro_

    Shiro允许开发者通过配置或编程方式定义角色(Role)和权限(Permission),然后将它们分配给用户。一旦用户被授予了某个角色,他就能执行该角色所关联的所有权限。 3. **会话管理**:Shiro可以帮助管理用户的会话...

    shiro-all jar

    1. **org.apache.shiro.aop**: 这个模块提供了面向切面的安全编程支持。AOP(Aspect-Oriented Programming)允许开发者在不修改代码的情况下添加安全控制,通过定义切点和通知来实现。 2. **org.apache.shiro....

    Apache Shiro_安全框架开发文档

    在实际使用中,Apache Shiro可以通过简单的配置或编程方式集成到Spring、Struts等其他Java应用框架中。其API设计直观,使得开发者可以快速上手并定制适合自身应用的安全策略。 通过阅读《Apache Shiro_安全框架开发...

    shiro1.7.1全包修补漏洞.rar

    Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密服务。这个"shiro1.7.1全包修补漏洞.rar"文件包含了针对Apache Shiro 1.7.1版本的一些安全修复和更新,旨在解决可能存在的...

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

    Apache Shiro是一款强大的安全框架,它简化了身份验证、授权、会话管理和加密等安全相关的任务。Shiro可以轻松集成到Spring MVC应用中,为用户提供认证(登录验证)、授权(权限控制)和会话管理功能。例如,通过...

    apache shiro整合struts2+spring+mybatis简单demo

    Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、会话管理和加密等功能,使得在Java应用中处理安全性变得更加简单。在这个“apache shiro整合struts2+spring+mybatis简单demo”中,我们将探讨如何将...

    SSM+Maven+Shiro

    **Apache Shiro** 是一个强大且易用的Java安全框架,专注于身份验证(Authentication)、授权(Authorization)和会话管理(Session Management)。Shiro可以帮助开发者轻松实现用户的登录验证、权限控制以及会话...

    Shiro1.2.2_源码(压缩包)

    Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份认证、授权、会话管理和加密等全面的安全服务。对于开发者来说,通过学习 Shiro 的源码,可以深入理解其内部工作原理,提高安全编程的能力。在这个 Shiro...

    spring mvc、mybatis、ehcache、apache shiro、bootstrap整合开发仓库管理系统源码

    Apache Shiro是一个安全管理框架,负责认证、授权(权限控制)、加密和会话管理。在仓库管理系统中,Shiro用于用户身份验证和权限控制,确保只有授权的用户才能访问特定的系统资源。例如,管理员可以查看所有库存,...

    Apache Shiro教程

    Apache Shiro是一个广泛使用的Java安全框架,它为身份验证、授权、加密以及会话管理提供了易于使用的API,同时支持JavaSE和JavaEE环境。Shiro的简单和直接让它在开发社区中备受欢迎,尤其对于那些不希望在安全领域...

    apache_shiro入门实例

    总之,Apache Shiro 提供了一套完整的安全解决方案,通过简单的配置和编程接口,可以帮助开发者快速实现权限管理功能。结合 Spring,可以更方便地集成到现有的企业级应用中,提高开发效率。本文提供的入门实例是一个...

    Apache_Shiro_使用手册中文版

    Apache Shiro是一个开源的Java安全框架,它以简单易用的方式提供认证、授权、会话管理以及加密等功能。Shiro是Apache软件基金会的顶级项目之一,它支持多种安全数据源,例如LDAP、关系型数据库、INI文件等,并且可以...

    shirodemo(spring3+shiro)(认证授权)

    Apache Shiro 是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,简化了企业级应用的安全实现。本项目“shirodemo”将结合Spring3框架,展示如何有效地进行用户认证和权限控制。 **1. ...

    Apache Shiro权限框架实战+项目案例视频课程

    Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证(Authentication)、授权(Authorization)以及会话管理(Session Management)等功能。本课程旨在通过实战演练和项目案例,帮助学习者深入理解...

Global site tag (gtag.js) - Google Analytics