12

目前我有一个 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,而且这些示例让我更加困惑。

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

4

1 回答 1

11

Realm接口是一个

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

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

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

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

username | password | role 

一张桌子Permissions作为

permission_id | permission_name

和一张桌子Account_Permissions

username | permission_id

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

阅读有关 Shiro 身份验证序列的文档以了解其中的AuthenticatingRealm来源。

至于INI 文件,根据您实现的方式Realm,您需要将其声明为

myRealm = com.company.security.shiro.YourDatabaseRealm

可能设置一些属性

myRealm.databaseName = account_database

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

于 2013-09-10T21:38:03.437 回答