最简单和最常见的方式来执行授权是直接以编程方式与当前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 是一个框架,可用于身份验证和授权。Apache Shiro的教程(PDF),相关jar包,源码等。
Apache Shiro。 官网 Apache Shiro API。 Apache Shiro开发文档。
Apache shiro 标签授权,介绍Apache shiro 标签授权的多种形式。
Apache Shiro中文版使用手册!
Apache Shiro 是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密。 Apache Shiro 的首要目标是易于使用和理解。安全有时候是很复杂的,甚至是痛苦的,但它没有必要这样。框架...
apache shiro 实例 apache shiro 实例
Apache_Shiro_使用手册(一)Shiro架构介绍
Shiro 是一个 Apache Incubator 项目,旨在简化身份验证和授权。在本文中,了解 Apache Shiro 并通过示例来在一个 Groovy web 应用程序中尝试使用 Shiro 进行身份验证和授权
apache shiro 管理用户权限与数据库交互
采用SpringBoot + Apache Shiro + Mybatis Plus + Thymeleaf 实现的内容管理系统(附带权限管理),是搭建博客、网站的不二之选。 技术栈:Spring Boot、Apache Shiro、MyBatis-Plus、Alibaba Druid、Redis、MySQL、...
Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。 使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
Apache shiro1.2.4反序列化漏洞介绍 Apache Shiro是一个Java安全框架,执行身份验证、授权、密码和会话管理。Apache Shiro框架提供了记住我(RememberMe)的功能,关闭了浏览器下次再打开时还是能记住你是谁,下次...
本系统(基于SpringBoot+MyBatis+Apache Shiro+Bootstrap+Thymeleaf) 可用于开发所有企业级WEB应用系统(如:各种后台管理系统、CRM、ERP、CMS、OA、博客、论坛等...)。响应式布局,支持大部分浏览器(如:IE9+...
springboot、shiro、mybatis、mybatis plus、mysql、thymeleaf、 3、实现功能:登陆认证、密码加密、权限授权等 4、优点:快速上手、全面支持验证、授权、加密和会话、灵活自定义设计、支持web环境、可以无缝集成...
Apache Shiro(发音为“shee-roh”,日语“堡垒(Castle)”的意思)是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用、移动应用到大型网络及企业...
apache shiro轻量级的安全认证授权框架让你快速搭建中下型企业安全认证模块
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
spring mvc、apache shiro、mysql 框架搭建,基于maven构建
Apache shiro 1.13.0源码 https://shiro.apache.org/
积分最低,Spring MVC+Mybatis+Ehcache+Apache Shiro+Bootstrap整合开发java仓库管理系统源码 开发环境:Eclipse ,JDK 1.8 ,Tomcat7 技术选型 后端技术 SpringMVC MVC框架 Spring Framework 容器 Apache ...