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

Posted

技术标签:

【中文标题】Apache Shiro - 使用数据库读取用户、角色和权限【英文标题】:Apache Shiro - using database to read users, roles and permissions 【发布时间】:2013-09-14 17:17:24 【问题描述】:

目前我有一个 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 需要哪些类。任何示例或解释将不胜感激!

【问题讨论】:

在我尝试回答之前,您知道如何使用 JDBC,您了解关系数据库吗? @BalusC 不是他们,我说的是在线示例,是的,它们非常简单,只要您使用 .ini 文件获取用户角色和许可,但当您想从关系数据库 @SotiriosDelimanolis 我不是专家,但据我了解,JDBC 是一个应用程序编程接口,允许您使用 Java 语言对数据库执行操作 【参考方案1】:

Realm 接口是一个

可以访问应用程序特定安全性的安全组件 用户、角色和权限等实体来确定 身份验证和授权操作。

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

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

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

username | password | role 

一个表Permissions作为

permission_id | permission_name

还有一张桌子Account_Permissions

username | permission_id

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

阅读 this document 关于 Shiro 的身份验证序列,了解 AuthenticatingRealm 的来源。

至于INIfile,取决于您如何实现Realm,您需要将其声明为

myRealm = com.company.security.shiro.YourDatabaseRealm

可能设置一些属性

myRealm.databaseName = account_database

Shiro 提供了自己的 JdbcRealm 类,它扩展了 AuthorizingRealm。这个类对你的数据库结构做了一些假设,但是你可以自定义它。

【讨论】:

最后我不得不使用 BoneCP 来向 Shiro 提供数据源,我希望无需使用任何外部库即可管理连接。感谢您耐心地解释它非常有帮助,最后我设法实现了 Shiro,并理解了这些概念,因为您在这里的简介。 @nivde92 不客气。请注意,无论您使用什么DataSource,上述内容都适用。我们正在讨论两个不同的层。 示例表仅反映基于用户的权限,不反映基于角色的权限。 基于角色的通常还意味着一个主题可以有多个角色。

以上是关于Apache Shiro - 使用数据库读取用户、角色和权限的主要内容,如果未能解决你的问题,请参考以下文章

shiro的角色和权限

Apache Shiro Web应用整合-配置

Apache Shiro:您将如何管理用户?

Apache Shiro 使用手册Shiro架构介绍

Apache Shiro 使用手册Shiro架构介绍

Apache Shiro 使用手册Shiro 授权