有没有java开源的基于角色的访问控制系统?
6 回答
Spring Security可能对你有好处。
有几个框架为您提供授权系统:
Spring Security
一个高度可定制的框架,Spring Security 被广泛用于处理在 Java 开发的任何基于企业的应用程序中出现的身份验证和访问控制(授权)问题。Apache Shiro
Apache Shiro 是一个功能强大且易于使用的 Java 安全框架,它执行身份验证、授权、加密和会话管理。借助 Shiro 易于理解的 API,您可以快速轻松地保护任何应用程序——从最小的移动应用程序到最大的 Web 和企业应用程序。JAAS(Java Authentication and Authorization Services)
JAAS 是一种安全 API,由专为用户身份验证和授权而设计的 Java 包组成。JAAS 在 Java SE 1.3 中作为可选包引入,后来从 JDK 1.4 开始集成到 JDK 中。OACC
这个Java 应用程序安全框架旨在细粒度(对象级别)访问控制。它的重点是提供功能齐全的 API 来执行和管理应用程序的身份验证和授权需求。它提供了灵活和强大的安全模型的完整实施。jCasbin
jCasbin 是一个用于 Java 项目的强大而高效的开源访问控制库。它支持基于各种访问控制模型执行授权。Keyclock
Keycloak 是针对现代应用程序和服务的开源身份和访问管理解决方案。它提供单点登录 (SSO)、身份代理和社交登录、用户联合、客户端适配器、管理控制台和帐户管理控制台等功能。
APACHE SHIRO Java 安全框架
它在授权上使用基于角色的访问控制
我想您要回答的问题是:
用户u是否有权对对象o进行操作操作?
要考虑的一件事是如何从业务角度(在 AC 机制之外)定义域对象和用户组。对于任何 RBAC 实施,您都需要对其进行配置以告知您的用户和用户组是什么。这将影响您对 RBAC 实施的选择。
另一个(更具体的)问题:您是否需要支持覆盖权限、包含和排除?具体来说,您是否希望能够支持对象 o1 对用户组 g1 可用,但对用户 u1(谁是组 g1 的一部分)可用的场景?
根据具体的答案,jguard(基于 JAAS 构建)可能是一个非常好的选择 - http://jguard.net/
有很多可能的解决方案,但哪一个是最好的(即满足您的需求而又不会太重或太复杂而无法实现)取决于您的要求:
您是在谈论 Web 服务的访问控制,还是其他?
您希望实施什么样的访问控制?纯粹基于资源 URL,还是取决于请求实体的状态/元数据?角色是简单的还是分层的?不同的动作需要不同的角色吗?
您是否也需要处理授权?
Apache Fortress 是符合 ANSI RBAC 的引擎 (INCITS 359),并在 Apache 软件许可下发布。你可以从这里把它拉下来:https ://directory.apache.org/fortress/ 。