java - Apache Shiro - 使用数据库读取用户、角色和权限

标签 java shiro jdbcrealm

目前我有一个 Swing 应用程序,我不想集成 Apache Shiro 来对某些角色进行身份验证和委派权限。我已经设法从我为测试创建的 shiro.ini 文件中读取用户,它看起来像这样:

[users]
admin = 123456, Administrator

[role]
Administrator = *:*:*

然而,这只是为了测试,现在我需要从数据库中读取许可,所以我在数据库中存储了一个包含我需要的信息的表,它看起来像这样:

users (id,password,username)
userRoles (userId, role)
rolePermission (permissionID,permission,roleID)

我一直在尝试理解使用 JDBC 领域的教程,但是它们使用 Web 应用程序或特殊框架来管理它们与数据库的连接,例如 Apache Derby 或 BoneCP,它们让我对 these 示例更加困惑。

所以我要问的是如果我想使用 JDBC 领域(带有 Oracle 数据库)我需要如何配置 shiro.ini 文件以及 shiro.ini 需要什么类。任何示例或解释将不胜感激!

最佳答案

Realm 接口(interface)是一个

security component that can access application-specific security entities such as users, roles, and permissions to determine authentication and authorization operations.

您可以实现它以与任何来源交互以查找用户及其权限。如果您想与基于 SQL 的数据库交互,您可以这样做。如果你想与文本文件交互,你可以这样做。如果您想与 Web 服务交互,您也可以这样做。

Realm 有两个有用的(几乎是必要的)扩展,它们是 AuthenticatingRealmAuthorizingRealm。它们分别为身份验证和授权服务提供接口(interface)。 AuthorizingRealm 扩展 AuthenticatingRealm。您应该扩展 AuthorizingRealm 以实现您自己的身份验证和授权逻辑。

举个例子:你有一个数据库,表Accounts

username | password | role 

一个表权限作为

permission_id | permission_name

和一个表Account_Permissions

username | permission_id

换句话说,一个Account可以有一个角色,但是有多个权限。使用 JDBC,您可以非常轻松地查询此类数据库并检索用户名、密码、角色和权限。您对 AuthorizingRealm 的实现将做到这一点并构建 Shiro 的 API 所需的对象。

阅读this document在 Shiro 的身份验证序列上了解 AuthenticatingRealm 的作用。

至于INI file ,这取决于您如何实现您的 Realm,您需要将其声明为

myRealm = com.company.security.shiro.YourDatabaseRealm

可能设置一些属性

myRealm.databaseName = account_database

Shiro 提供了它自己的 JdbcRealm 类,它扩展了 AuthorizingRealm。此类对您的数据库结构做了一些假设,但您可以对其进行自定义。

关于java - Apache Shiro - 使用数据库读取用户、角色和权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18728360/

相关文章:

java - 我应该如何阻止数字字符串在显示时四舍五入?

java - 如何使用采用 String 参数的自定义异常来扩展 Java Exception 类?

java - 如何使用 DB 对 Apache Shiro 中的用户登录进行身份验证?

tomcat - 使用 cURL 的 j_security 身份验证

java - 无法传递参数apache shiro jsp servlet

java - 引用通过方法分配的按钮的名称

Java - 使用 String 而不是 int/long 来表示不可变字段有任何缺陷吗?

ajax - 在与 JSF 和 Apache Shiro 的 Ajax 交互中处理身份验证

java - 关于 RESTful 和 Shiro 集成的示例

Apache Shiro 使用 token 登录失败