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

Abs*_*act 11 java jdbcrealm shiro

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

[users]
admin = 123456, Administrator

[role]
Administrator = *:*:*
Run Code Online (Sandbox Code Playgroud)

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

users (id,password,username)
userRoles (userId, role)
rolePermission (permissionID,permission,roleID)
Run Code Online (Sandbox Code Playgroud)

我一直在尝试理解使用JDBC领域的教程,但是他们使用Web应用程序或特殊框架来管理他们与Apache Derby或BoneCP之类的数据库的连接,他们更加困惑我这些例子.

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

Sot*_*lis 9

Realm接口是一个

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

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

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

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

username | password | role 
Run Code Online (Sandbox Code Playgroud)

一个表Permissions作为

permission_id | permission_name
Run Code Online (Sandbox Code Playgroud)

和一张桌子 Account_Permissions

username | permission_id
Run Code Online (Sandbox Code Playgroud)

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

阅读有关Shiro验证序列的文档,了解它的AuthenticatingRealm来源.

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

myRealm = com.company.security.shiro.YourDatabaseRealm
Run Code Online (Sandbox Code Playgroud)

可能设置一些属性

myRealm.databaseName = account_database
Run Code Online (Sandbox Code Playgroud)

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