文档章节

Shiro(一) : 权限控制介绍

开心的哈士奇
 开心的哈士奇
发布于 2018/07/04 18:06
字数 1329
阅读 31
收藏 0

权限管理

只要有用户参与的系统一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源

权限管理包括用户认证授权两部分。shiro也是基于此来进行设计实现的

用户认证

用户认证一般流程如下:

关键对象

subject:主体,理解为用户,可能是程序,都要去访问系统的资源,系统需要对subject进行身份认证。

principal:身份信息,通常是唯一的,一个主体还有多个身份信息,但是都有一个主身份信息(primary principal)

credential:凭证信息,可以是密码 、证书、指纹。

用户授权

用户授权,简单理解为访问控制,在用户认证通过后,系统对用户访问资源进行控制,用户具有资源的访问权限方可访问。

授权流程如下:

关键对象

授权的过程理解:who对what(which)进行how操作。

who:主体即subject,subject在认证通过后系统进行访问控制。

what(which):资源(Resource),subject必须具备资源的访问权限才可访问该 资源。资源比如:系统用户列表页面、商品修改菜单、商品id为001的商品信息。

how:权限/许可(permission) ,针对资源的权限或许可,subject具有permission访问资源,如何访问/操作需要定义permission,权限比如:用户添加、用户修改、商品删除。

权限模型
  • 主体(账号、密码)
  • 角色(角色名称)
  • 权限(权限名称、资源id)
  • 资源(资源名称、访问地址)
  • 角色和权限关系(角色id、权限id)
  • 主体和角色关系(主体id、角色id)

权限模型图如下:

通常企业开发中将资源和权限表合并为一张权限表,如下:

分配权限

  • 1)用户需要分配相应的权限才可访问相应的资源。权限是对于资源的操作许可。
  • 2)通常给用户分配资源权限需要将权限信息持久化,比如存储在关系数据库中。
  • 3)把用户信息、权限管理、用户分配的权限信息写到数据库(权限数据模型)

权限控制(授权核心)

基于角色的访问控制

RBAC(role based access control),基于角色的访问控制。 比如: 系统角色包括 :部门经理、总经理。。(角色针对用户来划分)

系统代码中实现:

//如果该user是部门经理则可以访问if中的代码
if(user.hasRole('部门经理')){
	//系统资源内容
	//用户报表查看
}
基于资源的访问控制

RBAC(Resource based access control),基于资源的访问控制。

资源在系统中是不变的,比如资源有:类中的方法,页面中的按钮。

对资源的访问需要具有permission权限,代码可以写为:

if(user.hasPermission ('用户报表查看(权限标识符)')){
	//系统资源内容
	//用户报表查看
}

权限管理解决方案

什么是粗粒度和细粒度权限

粗粒度权限管理,对资源类型的权限管理。资源类型比如:菜单、url连接、用户添加页面、用户信息、类方法、页面中按钮。。

细粒度权限管理,数据级别的权限管理。比如:部门经理只可以访问本部门的员工信息,用户只可以看到自己的菜单,大区经理只能查看本辖区的销售订单。。

如何实现粗粒度和细粒度权限管理

  • 如何实现粗粒度权限管理?

粗粒度权限管理比较容易将权限管理的代码抽取出来在系统架构级别统一处理。比如:通过springmvc的拦截器实现授权。

  • 如何实现细粒度权限管理?

对细粒度权限管理在数据级别是没有共性可言,针对细粒度权限管理就是系统业务逻辑的一部分,如果在业务层去处理相对比较简单,如果将细粒度权限管理统一在系统架构级别去抽取,比较困难,即使抽取的功能可能也存在扩展不强。

基于url拦截的方式实现
    1. 基于url拦截的方式实现在实际开发中比较常用的一种方式。
    1. 对于web系统,通过filter过虑器实现url拦截,也可以springmvc的拦截器实现基于url的拦截。
使用权限管理框架实现
  • 对于粗粒度权限管理,建议使用优秀权限管理框架来实现,节省开发成功,提高开发效率。
  • shiro就是一个优秀权限管理框架。

© 著作权归作者所有

开心的哈士奇
粉丝 15
博文 46
码字总数 86764
作品 0
海淀
程序员
私信 提问
Shiro权限控制框架入门1:Shiro的认证流程以及基本概念介绍

前言:我在最开始学习Shiro这个框架时,在网上搜索到的一个介绍比较全面的教程是:《跟我学Shiro》系列教程。但是在我看了他写的前几篇文章后,我发现虽然他在这个系列教程中把shiro的一些特...

pangfc
2017/01/06
0
0
Shiro权限控制框架入门2:如何将Shiro非入侵地整合到SpringMVC等Web项目中

前言:我在上一篇文章(PS:https://www.zifangsky.cn/770.html)中介绍了shiro框架的一些基本概念以及自定义Realm可以实现的自定义授权和认证的目的。在这一篇文章中我将介绍如何将Shiro与S...

pangfc
2017/01/06
0
0
沈晓军/LarvaFrame

LarvaFrame - 介绍&使用说明 sxjun @2016-01-29 该版本已经不再更新。 一、LarvaFrame介绍 LarvaFrame是一个权限管理系统,以SpringMvc+MiniJdbc+Shiro+MySQL+MQ+Redis+Flappy+Maven为架构,...

沈晓军
2016/01/30
0
0
结合SSM框架讲解Shiro案例--Shiro Demo

本教程结合SSM(SpringMVC + Mybatis)框架讲解Shiro(Shiro是 Java 的一个安全框架。我们经常看到它被拿来和 Spring 的 Security 来对比。),讲解的内容有自定义Shiro拦截器,Shiro Freem...

8446666
2016/06/29
20.9K
8
Spring Boot Shiro 权限管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/catoop/article/details/50520958 本来是打算接着写关于数据库方面,集成MyBatis的,刚好赶上朋友问到Shiro权...

单红宇
2016/01/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux使用源码包安装软件

前言: 最近整理一些以前的学习笔记。 过去都是存储在本地,此次传到网络留待备用。 源码包 Linux软件多数免费、开源,是开发人员编写的,具有很强可读性的一组相关代码文本。 源码包 --> 编...

迷失De挣扎
今天
2
0
IPv4如何转换为IPv6?

ipv6已经逐渐在应用,现在已经有很多的运营商支持ipv6,前天我们也发布了如何让电脑使用ipv6地址?有很多朋友在问?ipv6有什么作用,它的表示方式是什么,今天我们来一起来详细了解下ipv6相关计...

xiangyunyan
今天
3
0
小白讲网络安全系列

注入攻击防护 XSS注入 SQL注入 命令注入 文件上传 文件解压缩 CSRF防护 对称加密 非对称加密 数字证书 数字签名 完整性校验 消息验证码 单向散列Hash函数 口令单向加密算法 审计日志 认证鉴权...

一刀
今天
2
0
MYSQL 嵌套事务(SAVEPOINT) 与Spring 事务传播

摘要 savepoint 关键字可以实现嵌套事务。结合savepoint关键字,更方便理解spring的事务传播。 事务嵌套 初始化表脚本 drop table t;create table t(a int, primary key(a)); 开启事务 my...

liangxiao
今天
4
0
Chrome OS 更新新版本可让Linux访问USB连接的Android设备

谷歌再次为Chrome OS带来了重大版本更新,使版本号达到了75。本次更新的一大亮点就是允许在Chrome OS上运行的Linux能够识别通过USB方式连接的Android设备,能够让用户使用Linux进行调试等等。...

linuxCool
昨天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部