Java 常用安全框架的 授权模型 对比分析,涵盖 RBAC、ABAC、ACL、基于权限/角色 等模型,结合框架实现方式、适用场景和优缺点进行详细说明
以下是 Java 常用安全框架的 授权模型 对比分析,涵盖 RBAC、ABAC、ACL、基于权限/角色 等模型,结合框架实现方式、适用场景和优缺点进行详细说明:
1. 授权模型类型与定义
| 模型名称 | 定义 | 特点 |
|---|---|---|
| RBAC(基于角色的访问控制) | 通过角色分配权限,用户通过角色获得权限。 | 简单易管理,适合大多数企业场景,但灵活性较低。 |
| ABAC(基于属性的访问控制) | 根据用户、资源、环境等属性动态判断权限。 | 灵活度高,支持复杂条件,但配置复杂。 |
| ACL(访问控制列表) | 明确列出每个资源的访问权限(如用户/组可读写)。 | 粒度细,但管理成本高。 |
| 基于权限(Permission-Based) | 直接为用户或角色分配具体权限(如"delete:user")。 | 粒度可控,需自行管理权限层级。 |
2. 常用Java框架的授权模型对比
(1) Spring Security
- 支持模型:
- RBAC:通过
@RolesAllowed或hasRole()表达式。 - ABAC:通过
@PreAuthorize表达式(如@PreAuthorize("hasPermission('resource', 'WRITE')"))。 - 基于权限:通过自定义权限字符串(如
"READ:USER")。
- RBAC:通过
- 实现方式:
- 使用
MethodSecurityExpressionHandler或WebSecurityConfigurerAdapter配置。 - 支持与Spring Data集成,动态加载权限数据。
- 使用
- 适用场景:
- 企业级应用、微服务、复杂权限需求(如动态策略)。
- 优缺点:
- 优点:功能全面,支持多种模型混合使用。
- 缺点:配置复杂,ABAC需要编写大量表达式。
(2) Apache Shiro
- 支持模型:
- RBAC:通过角色(
Role)分配权限(Permission)。 - ACL:通过
Permission类实现细粒度控制(如UserRealm管理资源权限)。 - 基于权限:直接定义权限字符串(如
"user:*:delete")。
- RBAC:通过角色(
- 实现方式:
- 使用
RolesAuthorizationFilter或PermissionsAuthorizationFilter。 - 支持
@RequiresRoles、@RequiresPermissions注解。
- 使用
- 适用场景:
- 中小型项目、非Spring环境、需要细粒度控制的场景。
- 优缺点:
- 优点:简单易用,支持ACL和RBAC混合。
- 缺点:ABAC支持有限,需自定义扩展。
(3) Keycloak
- 支持模型:
- RBAC:通过角色(
Role)和组(Group)分配权限。 - 基于策略(Policy):通过规则(如IP、时间)动态授权。
- RBAC:通过角色(
- 实现方式:
- 通过Keycloak管理台配置角色和策略。
- 客户端通过
/auth/realms/{realm}/.well-known/openid-configuration获取权限。
- 适用场景:
- 单点登录(SSO)、跨系统统一权限管理。
- 优缺点:
- 优点:开箱即用,支持动态策略。
- 缺点:需额外部署服务,ABAC需自定义脚本。
(4) JAAS(Java Authentication and Authorization Service)
- 支持模型:
- 基于权限:通过
Policy文件或Permission类定义权限(如FilePermission)。
- 基于权限:通过
- 实现方式:
- 配置
java.policy文件或通过代码动态添加权限。 - 示例:
System.setSecurityManager(new SecurityManager());
- 配置
- 适用场景:
- 需要底层控制的Java应用(如自定义加密模块)。
- 优缺点:
- 优点:JDK原生支持,适合低层权限控制。
- 缺点:灵活性差,不支持RBAC/ABAC。
(5) Pac4j
- 支持模型:
- 基于身份(Identity-Based):通过用户属性(如邮箱、角色)控制权限。
- OAuth2/SAML集成:间接支持角色和权限传递。
- 实现方式:
- 使用
@RolesAllowed注解或自定义Authorizer。
- 使用
- 适用场景:
- 需快速集成OAuth2/SAML的项目。
- 优缺点:
- 优点:轻量级,支持多种认证协议。
- 缺点:授权模型较简单,需自行扩展。
(6) Bouncy Castle
- 支持模型:
- 基于加密:通过密钥管理实现数据访问控制。
- 实现方式:
- 使用加密算法(如AES、RSA)保护资源访问。
- 适用场景:
- 需要高级加密保护的场景(如敏感数据访问)。
- 优缺点:
- 优点:安全级别高,支持非标准算法(如国密)。
- 缺点:仅提供底层加密,不直接支持RBAC/ABAC。
3. 对比表格总结
| 框架 | 支持模型 | 实现方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|---|---|
| Spring Security | RBAC, ABAC, 权限基 | 表达式(@PreAuthorize)、注解、自定义权限处理器 | 企业级应用、微服务、复杂权限需求 | 功能全面,支持混合模型,Spring生态集成性强 | 配置复杂,学习曲线陡峭 |
| Apache Shiro | RBAC, ACL, 权限基 | 注解(@RequiresRoles)、Permission类、RolesAuthorizationFilter | 中小型项目、非Spring环境 | 简单易用,支持细粒度ACL控制 | ABAC支持有限,社区活跃度较低 |
| Keycloak | RBAC, 策略基 | Web界面配置角色、策略脚本 | SSO、跨系统集成 | 开箱即用,支持动态策略,支持多协议 | 部署复杂,需额外维护服务 |
| JAAS | 权限基 | Policy文件、Permission类 | 底层Java应用 | JDK原生支持,适合自定义安全模块 | 功能基础,不支持现代模型(RBAC/ABAC) |
| Pac4j | 身份基、OAuth2/SAML集成 | 注解(@RolesAllowed)、自定义Authorizer | 快速集成OAuth2/SAML的项目 | 轻量级,支持多种协议快速集成 | 授权模型简单,需自行扩展 |
| Bouncy Castle | 加密基 | 加密算法(AES、RSA、国密) | 高加密需求场景 | 支持高级加密算法,功能灵活 | 仅提供底层加密,不直接支持RBAC/ABAC模型 |
4. 选择建议
- 企业级复杂权限:Spring Security(支持ABAC和RBAC混合)。
- 中小型项目:Apache Shiro(简单RBAC+ACL)。
- SSO和多系统集成:Keycloak(RBAC+策略)。
- 加密保护优先:Bouncy Castle(结合其他框架使用)。
- 快速集成OAuth2:Pac4j(轻量级授权)。
根据项目规模、技术栈和权限需求,选择最合适的框架和模型组合!
相关文章:
Java 常用安全框架的 授权模型 对比分析,涵盖 RBAC、ABAC、ACL、基于权限/角色 等模型,结合框架实现方式、适用场景和优缺点进行详细说明
以下是 Java 常用安全框架的 授权模型 对比分析,涵盖 RBAC、ABAC、ACL、基于权限/角色 等模型,结合框架实现方式、适用场景和优缺点进行详细说明: 1. 授权模型类型与定义 模型名称定义特点RBAC(基于角色的访问控制)通…...
aws平台练习
注册 AWS 账户 访问 AWS 官方网站,点击“免费注册”按钮,按照提示完成账户注册: 提供电子邮件地址、密码和电话号码。 验证身份(可能需要手机验证码)。 设置 billing 信息。 2. 登录 AWS 管理控制台 使用注册的邮箱和…...
力扣DAY40-45 | 热100 | 二叉树:直径、层次遍历、有序数组->二叉搜索树、验证二叉搜索树、二叉搜索树中第K小的元素、右视图
前言 简单、中等 √ 好久没更了,感觉二叉树来回就那些。有点变懒要警醒,不能止步于笨方法!! 二叉树的直径 我的题解 遍历每个节点,左节点最大深度右节点最大深度当前节点当前节点为中心的直径。如果左节点深度更大…...
【MYSQL从入门到精通】数据类型及建表
一些基础操作语句 1.使用客户端工具连接数据库服务器:mysql -uroot -p 2.查看所有数据库:show databases; 3.创建属于自己的数据库: create database 数据库名;create database if not exists 数据库名; 强烈建议大家在建立数据库时指定编…...
【动态规划】 深入动态规划—两个数组的dp问题
文章目录 前言例题一、最长公共子序列二、不相交的线三、不同的子序列四、通配符匹配五、交错字符串六、两个字符串的最小ASCII删除和七、最长重复子数组 结语 前言 问题本质 它主要围绕着给定的两个数组展开,旨在通过对这两个数组元素间关系的分析,找出…...
结合大语言模型整理叙述并生成思维导图的思路
楔子 我比较喜欢长篇大论。这在代理律师界被视为一种禁忌。 我高中一年级的时候因为入学成绩好(所在县榜眼名次),直接被所在班的班主任任命为班长。我其实不喜欢这个岗位。因为老师一来就要提前注意到,要及时喊“起立”、英语课…...
Kotlin学习
kotlin android 开源,Kotlin开源项目集合_晚安 呼-华为开发者空间 干货来袭,推荐几款开源的Kotlin的Android项目 https://zhuanlan.zhihu.com/p/536789267 【已解决】 ubuntu apt-get update连不上dl.google.com_为什么不能ping谷歌-CSDN博客...
若依前后端分离版本从mysql切换到postgresql数据库
一、修改依赖: 修改admin模块pom.xml中的依赖,屏蔽或删除mysql依赖,增加postgresql依赖。 <!-- Mysql驱动包 --> <!--<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId> &l…...
【力扣hot100题】(073)数组中的第K个最大元素
花了两天时间搞明白答案的快速排序和堆排序。 两种都写了一遍,感觉堆排序更简单很多。 两种都记录一下,包括具体方法和易错点。 快速排序 class Solution { public:vector<int> nums;int quicksort(int left,int right,int k){if(leftright) r…...
【AAOS】【源码分析】CarAudioService(二)-- 功能介绍
汽车音频是 Android 汽车操作系统 (AAOS) 的一项功能,允许车辆播放信息娱乐声音,例如媒体、导航和通信。AAOS 不负责具有严格可用性和时间要求的铃声和警告,因为这些声音通常由车辆的硬件处理。将汽车音频服务集成在汽车中,彻底改变了驾驶体验,为驾驶员和乘客提供了音乐、…...
mapbox基础,加载F4Map二维地图
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性二、🍀F4Map 简介2.1 ☘️技术特点2.2 ☘️核…...
Android:Android Studio右侧Gradle没有assembleRelease等选项
旧版as是“Do not build Gradle task list during Gradle sync” 操作这个选项。 参考这篇文章:Android Studio Gradle中没有Task任务,没有Assemble任务,不能方便导出aar包_gradle 没有task-CSDN博客 在as2024版本中,打开Setting…...
DRAM CRC:让DDR5内存数据更靠谱
DRAM(动态随机存取存储器)是电脑内存的核心部件,负责存储和传输数据。如果数据在传输中出错,后果可能很严重,比如程序崩溃或者数据损坏。为了解决这个问题,DDR5内存引入了一个新功能,叫DRAM CRC(循环冗余校验)。简单来说,它是用来检查读写数据有没有问题的工具。 下面…...
RAI Toolbox详解
RAI Toolbox详解 摘要 RAI Toolbox是一个综合性的工具集,旨在帮助开发者和AI系统利益相关者更负责任地开发和监控AI系统,并做出更好的数据驱动决策。本文将详细介绍RAI Toolbox的功能、使用场景以及与类似AI项目的对比,帮助读者全面了解RAI…...
心率测量-arduino+matlab
参考:【教程】教你玩转Stduino之手指心跳检测模块 - 知乎 (zhihu.com) 1 原理 心跳检测模块,由一个红外线发射LED和红外接收器构成。手指心跳监测模块能够测量脉搏,是这样工作的:当手指放在发射器与接收器之间,红外发射…...
H3C的MSTP+VRRP高可靠性组网技术(MSTP单域)
以下内容纯为博主分享自己的想法和理解,如有错误轻喷 MSTP多生成树协议可以基于不同实例实现不同VLAN之间的负载分担 VRRP虚拟路由器冗余协议可以提高网关的可靠性防止单点故障的可能 在以前这两种协议通常一起搭配组网,来提高网络的可靠性和稳定性&a…...
字符串替换 (模拟)神奇数 (数学)DNA序列 (固定长度的滑动窗口)
⭐️个人主页:小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 字符串替换 (模拟)神奇数 (数学)DNA序列 (固定长度的滑动窗口&am…...
Centos7下安装hive详细步骤
在Centos 7系统上安装Hive的步骤如下: 下载Hive:首先,在Apache Hive的官方网站上下载最新版本的Hive压缩包,地址为:https://hive.apache.org/downloads.html。选择合适的版本并下载。 解压Hive压缩包:将下…...
Verilog学习-1.模块的结构
module aoi(a,b,c,d,f);/*模块名为aoi,端口列表a、b、c、d、f*/ input a,b,c,d;/*模块的输入端口为a,b,c,d*/ output f;;/*模块的输出端口为f*/ wire a,b,c,d,f;/*定义信号的数据类型*/ assign f~((a&b)|(~(c&d)));/*逻辑功能描述*/ endmoduleveirlog hdl 程…...
Linux驱动-块设备驱动
Linux驱动-块设备驱动 一,块设备驱动简介二,无请求队列情况(EMMC和SD卡等)三,请求队列情况(磁盘等带有I/O调度的设备)四,两者在驱动上区别 一,块设备驱动简介 块设备驱动…...
ffmpeg函数简介(封装格式相关)
文章目录 🌟 前置说明:FFmpeg 中 AVFormatContext 是什么?🧩 1. avformat_alloc_context功能:场景: 🧩 2. avformat_open_input功能:说明:返回值: ǹ…...
Android10.0 framework第三方无源码APP读写断电后数据丢失问题解决
1.前言 在10.0中rom定制化开发中,在某些产品开发中,在某些情况下在App用FileOutputStream读写完毕后,突然断电 会出现写完的数据丢失的问题,接下来就需要分析下关于使用FileOutputStream读写数据的相关流程,来实现相关 功能 2.framework第三方无源码APP读写断电后数据丢…...
[随笔] nn.Embedding的前向传播与反向传播
nn.Embedding的前向传播与反向传播 nn.Embedding的前向计算过程 embedding module 的前向过程其实是一个索引(查表)的过程 表的形式是一个 matrix(embedding.weight, learnable parameters) matrix.shape: (v, h) v:…...
搜广推校招面经七十一
滴滴算法工程师面经 一、矩阵分解的原理与优化意义 矩阵分解在推荐系统中是一个非常核心的方法,尤其是在 协同过滤(Collaborative Filtering) 中。我们可以通过用户对物品的评分行为来推测用户的喜好,从而推荐他们可能喜欢的内容。 1.1. 直观理解&…...
【算法学习】链表篇:链表的常用技巧和操作总结
算法学习: https://blog.csdn.net/2301_80220607/category_12922080.html?spm1001.2014.3001.5482 前言: 在各种数据结构中,链表是最常用的几个之一,熟练使用链表和链表相关的算法,可以让我们在处理很多问题上都更加…...
View UI (iview)表格拖拽排序
在使用 iView UI 的 Table 组件进行拖拽排序时,可以通过以下步骤获取最新的排序数据: 1. 启用拖拽功能 在 Table 组件上设置 draggable 属性,并绑定拖拽结束事件 on-row-drop。 <template><Table:columns"columns":dat…...
OpenNMT 部署和集成指南
OpenNMT(Open Neural Machine Translation)是一个开源的神经机器翻译(NMT)系统,由 Systran 和 Harvard NLP Group 在 2016 年联合推出。它的目标是为研究人员和企业开发者提供一个高质量、灵活且易于扩展的机器翻译框架…...
2台8卡L20服务器集群推理方案
1、整体流程梳理 #mermaid-svg-0aNtsWUnOH7ewXpN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-0aNtsWUnOH7ewXpN .error-icon{fill:#552222;}#mermaid-svg-0aNtsWUnOH7ewXpN .error-text{fill:#552222;stroke:#55…...
HarmonyOS:使用geoLocationManager (位置服务)获取位置信息
一、简介 位置服务提供GNSS定位、网络定位(蜂窝基站、WLAN、蓝牙定位技术)、地理编码、逆地理编码、国家码和地理围栏等基本功能。 使用位置服务时请打开设备“位置”开关。如果“位置”开关关闭并且代码未设置捕获异常,可能导致应用异常。 …...
系统分析师(二)--操作系统
概述 进程管理 选项A:该进程中打开的文件 进程中打开的文件是由整个进程来管理的,同一进程下的各个线程都可以对这些打开的文件进行访问和操作,所以进程中打开的文件是可以被这些线程共享的。 选项B:该进程的代码段 进程的代码…...
