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

时间:2013-09-10 20:39:06

标签: 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文件。任何例子或解释将不胜感激!

1 个答案:

答案 0 :(得分:8)

Realm界面是

  

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

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

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

举个例子:你有一个表Accounts

的数据库
username | password | role 

Permissions

permission_id | permission_name

和表Account_Permissions

username | permission_id

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

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

对于INI file,根据您实施Realm的方式,您需要将其声明为

myRealm = com.company.security.shiro.YourDatabaseRealm

可能设置一些属性

myRealm.databaseName = account_database

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