(转)shiro权限框架详解01-权限理论介绍
http://blog.csdn.net/facekbook/article/details/54890365
权限管理
本文介绍权限管理的理论和权限管理的一些名词。
- 介绍权限管理
- 理解身份认证和授权
- 掌握权限管理的数据模型
什么是权限管理
基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。
权限包括用户认证和授权两部分。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。
用户身份认证
概念
身份认证,就是判断一个用户是否是合法用户的一个过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看是否与系统中存储的该用户的用户名和口令一致,来判断用户是否正确。还有其他的身份认证方式,例如指纹、刷卡等。
用户密码身份认证流程

流程图关键对象
上面的流程图中需要理解以下关键对象:
- Subject:主体
访问系统的用户,主体可以是用户、程序等,进行认证的都称为主体。
-Principal:身份信息
是主体(subject)进行身份认证的标识,标识具有唯一性,如用户名、手机号、邮箱地址等,一个主体可以有多个身份,但必须有一个主身份(Primary Principal)
-credential:凭证信息
是只有主体自己知道的安全信息,如密码、证书等。
授权
概念
授权,即访问控制,控制谁能访问那些资源。主体进行身份认证后需要分配权限后方可访问系统资源,对于某些资源没有权限是无法访问的。
授权流程
下面是截图: 
流程图关键对象
授权可简单理解为who对what(which)进行how操作:
- Who,即主体(Subject),主体需要访问系统中的资源。
- What,即资源(Resource),如系统菜单、页面、按钮、类方法、系统商品信息等。
-How,权限/许可(Permission),规定了主体对资源操作的许可,权限离开资源没有意义,如用户查询权限、用户添加权限、某个类方法的调用权限、编号001的用户修改权限,通过权限可知主体对那些资源都有哪些操作。
权限分为粗粒度和细粒度,粗粒度权限是指对资源类型的权限,细粒度权限是对资源实例的权限。
主体、资源、权限关系如下图: 
权限模型
对上面的主体、资源、权限通过数据模型表示。
主体(账号、密码等)
资源(资源名称、资源地址等)
权限(权限名称、资源id)
角色(角色名称)
角色和权限(角色id、权限id)
主体和角色(主体id、角色id)
可以通过下图表示: 
通常企业开发一般会将资源表和权限表合并。如下:
资源(资源名称、资源访问地址)
权限(权限名称、资源id)
合并为:
权限(权限名称、资源名称、资源访问地址)
模型图如下: 
权限分配
对主体进行权限分配,主体只允许对分配的权限范围内的资源进行操作。权限分配的数据通常都需要进行持久化。
权限控制
权限控制有两种方法实现,一种是基于角色的访问控制还一种是基于资源的访问控制。
基于角色的访问控制
RBAC基于角色的访问控制(Role-Based Access Control)是以角色为中心进行访问控制,比如:主体的角色为总经理可以查询企业运营报表,查询员工工资信息等,访问流程如下:
上图中的判断逻辑可以理解为:
if(主体.hasRole("总经理")){
查询工资
}
缺点:以角色进行访问 控制粒度较粗。系统扩展性较差。比如上图查询工资的逻辑变为总经理或部门经理,就必须要修改代码。
if(主体.hsRole("总经理") || 主体.hasRole("部门经理")){
查询工资
}
- 基于资源的访问控制
RBAC基于资源的访问控制(Resouce-Based Access Control)是以资源为中心进行访问控制,比如:主体必须具有查询工资权限才可以查询员工的工资信息等,访问控制流程如下:
上图中的判断逻辑可以理解如下:
if(主体.hasPermission('查询工资权限标识')){
查询工资
}
优点:系统设计时定义好查询工资的权限标识。即使查询工资所需要的角色变为部门经理也只需要将“查询工资权限的标识”添加到“部门经理角色”的权限列表中,判断逻辑不用修改,系统可扩展性强。
(转)shiro权限框架详解01-权限理论介绍的更多相关文章
- (转)shiro权限框架详解02-权限理论介绍
http://blog.csdn.net/facekbook/article/details/54893042 权限管理解决方案 本文主要介绍权限管理的解决方法: 粗颗粒度和细颗粒度 基于url拦截 ...
- (转) shiro权限框架详解06-shiro与web项目整合(上)
http://blog.csdn.net/facekbook/article/details/54947730 shiro和web项目整合,实现类似真实项目的应用 本文中使用的项目架构是springM ...
- Shiro 安全框架详解二(概念+权限案例实现)
Shiro 安全框架详解二 总结内容 一.登录认证 二.Shiro 授权 1. 概念 2. 授权流程图 三.基于 ini 的授权认证案例实现 1. 实现原理图 2. 实现代码 2.1 添加 maven ...
- Shiro 安全框架详解一(概念+登录案例实现)
shiro 安全框架详细教程 总结内容 一.RBAC 的概念 二.两种常用的权限管理框架 1. Apache Shiro 2. Spring Security 3. Shiro 和 Spring Se ...
- (转)shiro权限框架详解06-shiro与web项目整合(下)
http://blog.csdn.net/facekbook/article/details/54962975 shiro和web项目整合,实现类似真实项目的应用 web项目中认证 web项目中授权 ...
- shiro 安全框架 详解
---恢复内容开始--- Shiro 简介 简介• Apache Shiro 是 Java 的一个安全(权限)框架.• Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE 环境, ...
- (转)shiro权限框架详解03-shiro介绍
http://blog.csdn.net/facekbook/article/details/54893740 shiro介绍 本文正式进入主题.本文将介绍如下内容: 什么是shiro 为什么需要学习 ...
- (转)shiro权限框架详解05-shiro授权
http://blog.csdn.net/facekbook/article/details/54910606 本文介绍 授权流程 授权方式 授权测试 自定义授权realm 授权流程 开始构造Secu ...
- (转) shiro权限框架详解04-shiro认证
http://blog.csdn.net/facekbook/article/details/54906635 shiro认证 本文介绍shiro的认证功能 认证流程 入门程序(用户登录和退出) 自定 ...
随机推荐
- (C/C++学习)1.C++中vector的使用
说明:vector是C++中一个非常方便的容器类,它用于存放类型相同的元素,利用成员函数及相关函数可以方便的对元素进行增加或删除,排序或逆序等等,下面将对这些功能一一叙述. 一.vector的第一种用 ...
- Git 基础教程 之 版本回退
不断对文件进行修改,然后不断提交修改到版本库里. 当你觉得文件修改到一定程度时,可以保存一个“快照”,这个“快照”在Git中称为“commit”. 一旦文件被改乱了.误删了,都可以从最近一个“comm ...
- Bootstrap关于排版
1.Bootstrap和普通的HTML页面一样,定义标题都是使用标签<h1>到<h6>,只不过Bootstrap覆盖了其默认的样式 2.使用了<small>标签来制 ...
- phpcms_完整版
{pc:content action="category" catid="0" num="6" siteid="$siteid&q ...
- docker 容器操作( 以 tomcat 为例 )
一.容器操作 一个镜像可以启动多个容器.比如一个 tomcat 镜像,可以启动多个tomcat 容器,启动后的这些 tomcat 都是各自独立的 二.步骤 1.搜索镜像 [root@localhost ...
- dubbo-dubboAdmin安装(一)
简介 Dubbo是什么? dubbo是阿里开源的分布式服务治理框架,对服务的负载均衡,权重,监控,路由规则,禁用启用的管理,以及服务的自动注册和发现 分布式架构下面临问题 在分布式架构下,我们会将一个 ...
- C#的WaitHandle : 管理多线程状态
有时候,我们创建了多线程,需要知道是否都完成了各自的工作.比如说,开启了多线程的下载,如何终止所有的线程并且在确保所有线程都终止之后才继续执行程序的退出呢? public partial class ...
- Android中加入水平线和垂直线
1.加入水平线 <View android:layout_height="0.5dip" android:background="#686868" and ...
- likely, unlikely的作用
在项目中看到了likely.unlikely宏的使用, 一直不是非常清楚它们的作用,所以就深究下. likely表示被測试的表达式大多数情况下为true, unlikely则表示相反. 两个宏定义: ...
- 使用OpenSSL做RSA签名验证 支付宝移动快捷支付 的server异步通知
因为业务须要.我们须要使用支付宝移动快捷支付做收款.支付宝给了我们<移动快捷支付应用集成接入包支付接口>见支付宝包<WS_SECURE_PAY_SDK>. 支付宝给的serve ...