Shiro权限管理框架详解

article/2025/9/19 20:21:30

1 权限管理1.1 什么是权限管理

基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源

权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。

1.2 用户身份认证1.2.1 概念

身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。对于采用指纹等系统,则出示指纹;对于硬件Key等刷卡系统,则需要刷卡。

1.2.2 用户名密码身份认证流程

1aab496903c24a2d97d24181bd3b8dad.jpeg

1.2.3 关键对象

上边的流程图中需要理解以下关键对象:

Subject:主体

访问系统的用户,主体可以是用户、程序等,进行认证的都称为主体;

Principal:身份信息

是主体(subject)进行身份认证的标识,标识必须具有唯一性,如用户名、手机号、邮箱地址等,一个主体可以有多个身份,但是必须有一个主身份(Primary Principal)。

credential:凭证信息

是只有主体自己知道的安全信息,如密码、证书等。

1.3 授权1.3.1 概念

授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的。

1.3.2 授权流程

下图中橙色为授权流程。

e0aebca42fe84a25bd24e467f86fc2fd.png

1.3.3 关键对象

授权可简单理解为who对what(which)进行How操作:

Who,即主体Subject),主体需要访问系统中的资源。

What,即资源(Resource),如系统菜单、页面、按钮、类方法、系统商品信息等。资源包括资源类型和资源实例,比如商品信息为资源类型,类型为t01的商品为资源实例,编号为001的商品信息也属于资源实例。

How,权限/许可(Permission),规定了主体对资源的操作许可,权限离开资源没有意义,如用户查询权限、用户添加权限、某个类方法的调用权限、编号为001用户的修改权限等,通过权限可知主体对哪些资源都有哪些操作许可。

权限分为粗颗粒和细颗粒,粗颗粒权限是指对资源类型的权限,细颗粒权限是对资源实例的权限。

主体、资源、权限关系如下图:

3aea173012f341858b240666f70748bf.png

1.3.4 权限模型

对上节中的主体、资源、权限通过数据模型表示。

主体(账号、密码)

资源(资源名称、访问地址)

权限(权限名称、资源id)

角色(角色名称)

角色和权限关系(角色id、权限id)

主体和角色关系(主体id、角色id)

如下图:

07ec5f2c1e024df49f6e4c88f0d173eb.png

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

资源(资源名称、访问地址)

权限(权限名称、资源id)

合并为:

权限(权限名称、资源名称、资源访问地址)

be869e847a0c40c781e05ebb917db317.png

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

1.3.5 权限分配

对主体分配权限,主体只允许在权限范围内对资源进行操作,比如:对u01用户分配商品修改权限,u01用户只能对商品进行修改。

权限分配的数据通常需要持久化,根据上边的数据模型创建表并将用户的权限信息存储在数据库中。

1.3.6 权限控制

用户拥有了权限即可操作权限范围内的资源,系统不知道主体是否具有访问权限需要对用户的访问进行控制。

1.3.6.1 基于角色的访问控制

RBAC基于角色的访问控制(Role-Based Access Control)是以角色为中心进行访问控制,比如:主体的角色为总经理可以查询企业运营报表,查询员工工资信息等,访问控制流程如下:

41593c85e9774ca0a4a081b41f7d14c2.png

上图中的判断逻辑代码可以理解为:

if(主体.hasRole("总经理角色id")){

查询工资

}

缺点:以角色进行访问控制粒度较粗,如果上图中查询工资所需要的角色变化为总经理和部门经理,此时就需要修改判断逻辑为“判断主体的角色是否是总经理或部门经理”,系统可扩展性差。

修改代码如下:

if(主体.hasRole("总经理角色id") || 主体.hasRole("部门经理角色id")){

查询工资

}

1.3.6.2 基于资源的访问控制

RBAC基于资源的访问控制(Resource-Based Access Control)是以资源为中心进行访问控制,比如:主体必须具有查询工资权限才可以查询员工工资信息等,访问控制流程如下:

上图中的判断逻辑代码可以理解为:

if(主体.hasPermission("查询工资权限标识")){

查询工资

}

优点:系统设计时定义好查询工资的权限标识,即使查询工资所需要的角色变化为总经理和部门经理也只需要将“查询工资信息权限”添加到“部门经理角色”的权限列表中,判断逻辑不用修改,系统可扩展性强。

1 权限管理解决方案1.1 粗颗粒度和细颗粒度1.1.1 什么是粗颗粒度和细颗粒度

对资源类型的管理称为粗颗粒度权限管理,即只控制到菜单、按钮、方法,粗粒度的例子比如:用户具有用户管理的权限,具有导出订单明细的权限。对资源实例的控制称为细颗粒度权限管理,即控制到数据级别的权限,比如:用户只允许修改本部门的员工信息,用户只允许导出自己创建的订单明细。

1.1.2 如何实现粗颗粒度和细颗粒度

对于粗颗粒度的权限管理可以很容易做系统架构级别的功能,即系统功能操作使用统一的粗颗粒度的权限管理。

对于细颗粒度的权限管理不建议做成系统架构级别的功能,因为对数据级别的控制是系统的业务需求,随着业务需求的变更业务功能变化的可能性很大,建议对数据级别的权限控制在业务层个性化开发,比如:用户只允许修改自己创建的商品信息可以在service接口添加校验实现,service接口需要传入当前操作人的标识,与商品信息创建人标识对比,不一致则不允许修改商品信息。

1.2 基于url拦截

基于url拦截是企业中常用的权限管理方法,实现思路是:将系统操作的每个url配置在权限表中,将权限对应到角色,将角色分配给用户,用户访问系统功能通过Filter进行过虑,过虑器获取到用户访问的url,只要访问的url是用户分配角色中的url则放行继续访问。

如下图:

308094d677fc426297ad8893e80b014f.jpeg

1.3 使用权限管理框架

对于权限管理基本上每个系统都有,使用权限管理框架完成权限管理功能的开发可以节省系统开发时间,并且权限管理框架提供了完善的认证和授权功能有利于系统扩展维护,但是学习权限管理框架是需要成本的,所以选择一款简单高效的权限管理框架显得非常重要。

1 基于url拦截实现1.1 环境准备

jdk:1.7.0_72

web容器:tomcat7

系统框架:springmvc3.2.0+mybatis3.2.7

(详细参考springmvc教案)

前台UI:jquery easyUI1.2.2

1.2 数据库

创建mysql5.1数据库

创建用户表、角色表、权限表、角色权限关系表、用户角色关系表。

导入脚本,先导入shiro_sql_talbe.sql再导入shiro-sql_table_data.sql

cc95d47bda6946b299d2fabf7c22aed0.png

1.3 activeUser用户身份类

用户登陆成功记录activeUser信息并将activeUser存入session。

909ece59b97c4ec8acbd05f70f0f6129.png

1.4 anonymousURL.properties

anonymousURL.properties公开访问地址,无需身份认证即可访问。

1.5 commonURL.properties

commonURL.properties公共访问地址,身份认证通过无需分配权限即可访问。

1.6 用户身份认证拦截器

使用springmvc拦截器对用户身份认证进行拦截,如果用户没有登陆则跳转到登陆页面,本功能也可以使用filter实现 。

c3f59701f488416c8ec7786673fc344f.jpeg

1.7 用户授权拦截器

使用springmvc拦截器对用户访问url进行拦截,如果用户访问的url没有分配权限则跳转到无权操作提示页面(refuse.jsp),本功能也可以使用filter实现。

0387506b3630489a9cd66ecfbbfb55ae.jpeg


http://chatgpt.dhexx.cn/article/QKrCjUHe.shtml

相关文章

Shiro 权限管理

一共5个表 用户表角色表权限表用户角色中间表角色权限中间表 权限验证 用户不跟权限直接关联, 可以给用户多个角色, 每个角色都有对应的权限,所以给用户加一个角色,就相当于,给用户赋了对应的权限。一个用户可以有多…

Shiro: 权限管理

一、权限管理 1、什么是权限管理 权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问且只能访问自己被授权的资源。   权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要…

【权限管理框架】一文看懂Shiro权限管理框架!

文章目录 1.JavaWeb中的权限控制2.权限框架核心知识ACL和RBAC2.1.ACL和RBAC简介2.2主流权限框架介绍 3.Shiro架构和基本概念3.1.Shiro的4大核心模块3.2.Shiro权限控制运行流程 4.Shiro简单API案例4.1.项目搭建所需依赖4.2.Shiro认证简单实操4.3.Shiro授权简单实操 5.安全数据来…

【端口扫描工具】nmap核心使用方法

目录 nmap的基础使用: 1.1、常用命令参数: 命令格式: 主机发现: 扫描 扫描速度 扫描端口 1.2、基本扫描 1.3、自定义端口扫描 1.4、Ping扫描 1.5、路由追踪 1.6、扫描网段,C段 1.7、操作系统类型的探测 1.8、nmap万能…

【安全工具】Nmap基本使用方法

Nmap工具介绍 Nmap是一款开放源代码的网络探测和安全审核工具,它被设计用来快速扫描大型网络、包括主机探测与发现、开放的端口情况、操作系统与应用服务指纹、WAF识别及常见安全漏洞。 它的图形化界面是 Zenmap、分布式框架为 Dnmap Nmap功能 主机探测&#xf…

nmap工具使用方法

nmap工具使用方法 简介 Nmap&#xff08;网络映射器&#xff09;是一个用于网络探索和安全审计的开源工具 常用扫描端口命令 <nmap -sV 192.168.204.64> -sV&#xff1a;探测端口服务版本<nmap -T4 -A -v 192.168.204.64> -T4&#xff1a; 指定扫描过程使用的时…

nmap使用方法--方便自己查

在侦查期间&#xff0c;扫描一直是信息收集的初始阶段。 什么是侦查 侦查是尽可能多收集关于目标网络的信息。从黑客的角度来看&#xff0c;信息收集对于一次攻击非常有用&#xff0c;所以为了封锁恶意的企图&#xff0c;渗透测试者通常尽力查找这些信息&#xff0c;发现后修复…

端口扫描工具Nmap使用方法 day02

nmap是一个网络端口扫描软件&#xff0c;用来扫描网上电脑开放的网络连接端口&#xff0c;确定哪些服务运行在哪些端口&#xff0c;并且推断计算机运行哪个os。它是网络管理员必用的软件之一&#xff0c;渗透测试人员也可以用它评估网络系统安全。下面介绍kali linux中nmap的用…

nmap详细使用教程

目录 nmap简介 nmap常用命令 实例演示-发现主机 实例演示-端口发现 实例演示-获得服务版本详细信息 实例演示-确定主机操作系统 nmap简介 nmap是一款非常强大的主机发现和端口扫描工具&#xff0c;而且nmap运用自带的脚本&#xff0c;还能完成漏洞检测&#xff0c;同时支…

nmap常见使用方法

基础使用&#xff1a; 1.nmap ip 探测目标ip1-10000范围内所有开放端口 比如&#xff1a;扫描192.168.91.1 可以看见&#xff0c;已经扫描出目标IP对应的一些信息了 2.nmap -vv ip 简单扫描&#xff0c;输出详细结果&#xff08;一般没什么用&#xff09; nmap -p port ip …

Nmap 基本使用方法

一、下载工具包 进入官网下载安装包Download the Free Nmap Security Scanner for Linux/Mac/Windows 二、安装zenmap 工具 点击“下一步”安装完成。Zenmap 界面如下 三、Nmap使用 Nmap是主机扫描工具,他的图形化界面是Zenmap,分布式框架为Dnamp。 Nmap可以完成以下任务…

nmap 使用方法详细介绍

nmap的使用 前言nmap 作用Nmap使用教程nmap的基本输入&#xff1a;扫描参数&#xff1a;端口扫描&#xff1a;端口状态扫描&#xff1a;UDP扫描协议扫描 总结Nmap的基础知识Nmap的扫描技术Nmap的OS检测&#xff08;O&#xff09;Nmap的操作系统指纹识别技术&#xff1a; 前言 …

Nmap使用方法及常用命令学习

本文为学习笔记&#xff0c;仅限学习交流。不得利用、从事危害国家或人民安全、荣誉和利益等活动。 请参阅《中华人民共和国网络安全法》 7-30作业 —Nmap 练习 Nmap 是Network Mapper&#xff0c;中文为“网络映射器”。 Nmap 是一款开源的网络探测和安全审核的工具&#xff…

Nmap使用方法简析

NMAP 引子&#xff1a; Nmap&#xff0c; 是 Network Mapper 的缩写&#xff0c;由 Gordon Lyon 维护(更多关于 Mr. Lyon 的信息在这里: http://insecure.org/fyodor/) &#xff0c;并被世界各地许多的安全专业人员使用。 这个工具在 Linux 和 Windows 下都能使用&#xff0…

nmap使用方法详解

Nmap详解 Nmap&#xff08;网络映射器&#xff09;是一款开放源代码的网络探测和安全审核工具&#xff0c;它被设计用来快速扫描大型网络&#xff0c;包括主机探测与发现、开放的端口情况、操作系统与应用服务指纹识别、WAF识别及常见安全漏洞。 Nmap的特点&#xff1a; - 主机…

Nmap的使用方法总结

文章目录 Nmap的使用方法总结一&#xff1a;各种参数的使用1&#xff1a;ping扫描 —— nmap < 要扫描的目标ip地址>2&#xff1a;TCP SYN Ping扫描3&#xff1a;-PA TCP ACK Ping扫描4&#xff1a;半开扫描5&#xff1a;自定义端口扫描 nmap -P&#xff08;扫描范围&…

nmap使用方法

目录 第一、nmap使用 第一、nmap使用 1、nmap扫描一台服务器&#xff0c;默认扫描1000个最有可能开放的TCP端口。 2、-v显示详细信息 3、-p表示端口扫描。 扫描全部端口&#xff0c;查看开放了那些。 4、查看端口正在被那个进程使用 查看22端口正在被那个进程使用。 查看s…

Nmap使用教程图文教程(超详细)

kali的命令行中可以直接使用 nmap 命令&#xff0c;打开一个「终端」&#xff0c;输入 nmap 后回车&#xff0c;可以看到 nmap 的版本&#xff0c;证明 nmap 可用。 Nmap有四种基本功能&#xff1a;「端口扫描」、「主机探测」、「服务识别」和「系统识别」。 一、端口扫描 扫…

诗词——人间绝句

人生若只如初见&#xff0c;何事秋风悲画扇。 ——纳兰性德《木兰花令拟古决绝词谏友》 花自飘零水自流&#xff0c;一种相思&#xff0c;两处闲愁。 ——李清照《一剪梅红藕香残玉覃秋》 最是人间留不住&#xff0c;朱颜辞镜花辞树。 ——王国维《蝶恋花》 金风玉露一相逢&…

[《雪的散文诗》小个子的诗集]2012年8月28日

雪花吟 雪是冬的姑娘&#xff0c;冬把雪孕育。 什么时候起&#xff0c;没有了天朗气清。 沉寂灰朦&#xff0c;是天&#xff0c;是云&#xff0c;是气&#xff1f; 凝固最后一颗秋露&#xff0c;冰封最后一处溪流。 天动了&#xff0c;或者是云动了&#xff0c;亦或是气动了…