授 权

  授权实质上就是访问控制 - 控制用户能够访问应用中的哪些内容,比如资源、Web页面等等。多数用户执行访问控制是通过使用诸如角色和权限这类概念完成的。也就是说,通常用户允许或不允许做的事情是根据分配给他们的角色或权限决定的。那么,通过检查这些角色和权限,你的应用程序就可以控制哪些功能是可以暴露的。如你期望的,Subject API让你可以很容易的执行角色和权限检查。如清单7中的代码片段所示:如何检查Subject被分配了某个角色:

  列表7. 角色检查

if ( subject.hasRole(“administrator”) ) {
//显示‘Create User’按钮
} else {
//按钮置灰?
}

  如你所见,你的应用程序可基于访问控制检查打开或关闭某些功能。

  权限检查是执行授权的另一种方法。上例中的角色检查有个很大的缺陷:你无法在运行时增删角色。角色名字在这里是硬编码,所以,如果你修改了角色名字或配置,你的代码就会乱套!如果你需要在运行时改变角色含义,或想要增删角色,你必须另辟蹊径。

  为此,Shiro支持了权限(permissions)概念。权限是功能的原始表述,如‘开门’,‘创建一个博文’,‘删除‘jsmith’用户’等。通过让权限反映应用的原始功能,在改变应用功能时,你只需要改变权限检查。进而,你可以在运行时按需将权限分配给角色或用户。

  如清单8中,我们重写了之前的用户检查,取而代之使用权限检查。

  清单8. 权限检查

if ( subject.isPermitted(“user:create”) ) {
//显示‘Create User’按钮
} else {
//按钮置灰?
}

  这样,任何具有“user:create”权限的角色或用户都可以点击‘Create User’按钮,并且这些角色和指派甚至可以在运行时改变,这给你提供了一个非常灵活的安全模型。

  “user:create”字符串是一个权限字符串的例子,它遵循特定的解析惯例。Shiro借助它的WildcardPermission支持这种开箱即用的惯例。尽管这超出了本文的范围,你会看到在创建安全策略时,WildcardPermission非常灵活,甚至支持像实例级别访问控制这样的功能。

  清单9. 实例级别的权限检查

if ( subject.isPermitted(“user:delete:jsmith”) ) {
//删除‘jsmith’用户
} else {
//不删除‘jsmith’
}

  该例表明,你可以对你需要的单个资源进行访问控制,甚至深入到非常细粒度的实例级别。如果愿意,你甚至还可以发明自己的权限语法。参见Shiro Permission文档可以了解更多内容。最后,就像使用认证那样,上述调用最终会转向SecurityManager,它会咨询Realm做出自己的访问控制决定。必要时,还允许单个Realm同时响应认证和授权操作。

  以上就是对Shiro授权功能的简要概述。虽然多数安全框架止于授权和认证,但Shiro提供了更多功能。下面,我们将谈谈Shiro的高级会话管理功能。

转载于:https://www.cnblogs.com/jerryxing/archive/2012/06/01/2531224.html

分布式平台下的HS(High-Security) --Shiro 授权相关推荐

  1. 分布式平台下的HS(High-Security) --Apache Shiro API(介绍)

    在尝试保护你的应用时,你是否有过挫败感?是否觉得现有的Java安全解决方案难以使用,只会让你更糊涂?本文介绍的Apache Shiro,是一个不同寻常的Java安全框架,为保护应用提供了简单而强大的方 ...

  2. 分布式平台下的HS(High-Security) --对称加密

        对称加密  MD5或者说HASH值是一种不可逆的算法.如果需要从密文还原成明文,那么就需要对称和非对称这两类可逆算法. 首先,简单介绍下这两类算法.图9-1是对称算法的示意图: 图1-1 对称 ...

  3. BEA WebLogic平台下J2EE调优攻略--转载

    BEA WebLogic平台下J2EE调优攻略   2008-06-25 作者:周海根 出处:网络   前 言 随着近来J2EE软件广泛地应用于各行各业,系统调优也越来越引起软件开发者和应用服务器提供 ...

  4. jboss jta mysql_JBoss平台下JTA与JMS实验软件架构8

    1 JTA 简介: Java Transaction API,JTA Transaction 是指由J2EE Transaction manager 去管理的 事务.通过调用UserTransacti ...

  5. NET平台下Web树形结构程序设计

    .NET平台下Web树形结构程序设计 李洪根 我的上篇文章<树形结构在开发中的应用>主要是在Windows Form下的实现,下面讲一下Web Form下的实现. 概述 TreeView是 ...

  6. .NET平台下WEB应用程序的部署(安装数据库和自动配置)

    .NET平台下WEB应用程序的部署(安装数据库和自动配置)   李洪根 在.NET平台下,部署 Web 解决方案是比较方便的.我们可以利用Visual Studio.NET 2003添加一个WEB安装 ...

  7. .NET平台下Web树形结构程序设计

    .NET平台下Web树形结构程序设计 我的上篇文章<树形结构在开发中的应用>主要是在Windows Form下的实现,下面是Web Form下的实现. 数据库设计 首先,我们在SQL SE ...

  8. Dotnet全平台下APM-Trace探索

    随着支撑的内部业务系统越来越多,向着服务化架构进化,在整个迭代过程中,会逐渐暴露出以下问题. 传统依赖于应用服务器日志等手段的排除故障原因的复杂度越来越高,传统的监控服务已经无法满足需求. 终端--& ...

  9. Windows平台下Git服务器搭建

    初识Git Git是什么? Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑, ...

最新文章

  1. Linux网卡驱动程序编写
  2. rsync问题-connection refused(111)、Unknown module
  3. vlc android 编译 mac,在Mac中编译vlc-android小结
  4. 计算机d盘无法格式化,电脑D盘无法格式化怎么办 D盘无法格式化问题解决办法...
  5. 深入理解ThreadLocal
  6. python基础===PEP网站,代码规范指南
  7. Spring Boot 2.3 版本变化[翻译]
  8. 空间统计分析_CDA 数据分析师 Level 1 备考系列之推断性统计分析概述
  9. centos7安装docker 以及简单使用
  10. 由浅入深了解Thrift(一)——Thrift介绍与用法
  11. Oracle分析函数、多维函数和Model函数简要说明,主要针对BI报表统计
  12. elf section类型_探索ELF可执行文件的“干货”:段头表和段的基本介绍
  13. Python部署虚拟环境的利器——Virtualenv
  14. 游戏开发项目管理那些事
  15. MFC分析工具—Resource Hacker
  16. linux系统usb触摸驱动,Linux ——usb触摸屏驱动 - usbtouchscreen
  17. 利用谷歌浏览器模拟网速慢的情况
  18. GMM-HMM 详解
  19. python中访问列表元素具体格式_Python3基础 list 访问列表中的列表的元素
  20. 怎么解决微信屏蔽app下载链接

热门文章

  1. 梦醒了,一切都结束了
  2. Mysql自定义Sequence-实现序列自增功能
  3. 解决gitlab限制上传大小文件的问题
  4. 在 CentOS 7 上搭建 Jenkins + Maven + Git 持续集成环境
  5. Android与物联网设备通信-自定义报文与字节序
  6. iOS 代码触发button点击事件
  7. 对蚊子个人博客进行了彻底的改造
  8. java qq发送邮件
  9. DirectX SDK (June 2010)安装错误S1023,解决方法
  10. Meteor资源国外优秀web APP 收藏