【基于url权限管理 shiro(一)】--基础

本文涉及的产品
访问控制,不限时长
简介: 只要有用户参与的系统一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。权限管理包括用户认证和授权两部分。     用户认证 1.概念 用户认证,用户去访问系统,系统要验证用户身份的合法性。

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

 

 

用户认证

1.概念

用户认证,用户去访问系统,系统要验证用户身份的合法性。最常用的用户身份验证的方法:1、用户名密码方式、2、指纹打卡机、3、基于证书验证方法。。系统验证用户身份合法,用户方可访问系统的资源。

 

2.用户认证流程


 

 

3.关键对象

subject:主体,理解为用户,可能是程序,都要去访问系统的资源,系统需要对subject进行身份认证。
principal:身份信息,通常是唯一的,一个主体还有多个身份信息,但是都有一个主身份信息(primary principal)
credential:凭证信息,可以是密码 、证书、指纹
总结:主体在进行身份认证时需要提供身份信息和凭证信息

 

用户授权

1.概念

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

2.授权流程


 

3.关键对象

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

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

what(which):资源(Resource),subject必须具备资源的访问权限才可访问该 资源。资源比如:系统用户列表页面、商品修改菜单、商品id为001的商品信息。
资源分为资源类型和资源实例:
系统的用户信息就是资源类型,相当于Java类。
系统中id为001的用户就是资源实例,相当于new的java对象。

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

4. 权限模型

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

如下图:


 

通常企业开发中将资源和权限表合并为一张权限表,如下:
资源(资源名称、访问地址)
权限(权限名称、资源id)
合并为:
权限(权限名称、资源名称、资源访问地址)


上图常被称为权限管理的通用模型,不过企业在开发中根据系统自身的特点还会对上图进行修改,但是用户、角色、权限、用户角色关系、角色权限关系是需要去理解的。

3.分配权限:

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

4.权限控制:

1.基于角色的访问控制

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


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


问题:
角色针对人划分的,人作为用户在系统中属于活动内容,如果该 角色可以访问的资源出现变更,需要修改你的代码了,比如:需要变更为部门经理和总经理都可以进行用户报表查看,代码改为:

if(user.hasRole('部门经理') || user.hasRole('总经理')  ){
//系统资源内容
//用户报表查看
}

基于角色的访问控制是不利于系统维护(可扩展性不强)。

 

2.基于资源的权限访问控制

RBAC(Resource  based  access  control),基于资源的访问控制。
资源在系统中是不变的,比如资源有:类中的方法,页面中的按钮。
对资源的访问需要具有permission权限,代码可以写为:
if(user.hasPermission ('用户报表查看(权限标识符)')){
//系统资源内容
//用户报表查看
}

上边的方法就可以解决用户角色变更不用修改上边权限控制的代码。
如果需要变更权限只需要在分配权限模块去操作,给部门经理或总经理增或删除权限。
建议使用基于资源的访问控制实现权限管理。

 

总结:

         在想要对shiro有很好的了解,这些基础知识是必须了解的.下篇博客将讲解权限管理解决方案.如果您喜欢博文,请点击末尾的"顶"

 

http://blog.csdn.net/chenxiaochan/article/details/72880772

 

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
Java
Shiro学习-URL配置细节(六)
Shiro学习-URL配置细节(六)
75 0
|
域名解析 网络协议 安全
迈入JavaWeb第一步,Java网络编程基础,TCP网络编程URL网络编程等
迈入JavaWeb第一步,Java网络编程基础,TCP网络编程URL网络编程等
139 0
迈入JavaWeb第一步,Java网络编程基础,TCP网络编程URL网络编程等
|
前端开发 JavaScript 搜索推荐
前端基础——URL详解
前端基础——URL详解
574 0
前端基础——URL详解
|
Java
网络基础 - URL & URI 区别
网络基础 - URL & URI 区别
155 0
网络基础 - URL & URI 区别
|
JavaScript 前端开发
JavaScript基础插曲---apply,call和URL编码等方法
JavaScript基础插曲---apply,call和URL编码等方法
167 0
JavaScript基础插曲---apply,call和URL编码等方法
|
XML 数据格式
网络基础 - URL & URI & URN 区别
网络基础 - URL & URI & URN 区别
182 0
网络基础 - URL & URI & URN 区别
|
存储 算法 Java
Shiro入门这篇就够了【Shiro的基础知识、回顾URL拦截】(三)
本文主要讲解的知识点有以下: 权限管理的基础知识 模型 粗粒度和细粒度的概念 回顾URL拦截的实现 Shiro的介绍与简单入门
292 0
Shiro入门这篇就够了【Shiro的基础知识、回顾URL拦截】(三)
|
存储 缓存 安全
Shiro入门这篇就够了【Shiro的基础知识、回顾URL拦截】(二)
本文主要讲解的知识点有以下: 权限管理的基础知识 模型 粗粒度和细粒度的概念 回顾URL拦截的实现 Shiro的介绍与简单入门
369 0
Shiro入门这篇就够了【Shiro的基础知识、回顾URL拦截】(二)
|
存储 安全 Java
Shiro入门这篇就够了【Shiro的基础知识、回顾URL拦截】(一)
本文主要讲解的知识点有以下: 权限管理的基础知识 模型 粗粒度和细粒度的概念 回顾URL拦截的实现 Shiro的介绍与简单入门
144 0