目前我有一个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文件。任何例子或解释将不胜感激!
答案 0 :(得分:8)
Realm
界面是
可以访问特定于应用程序的安全性的安全组件 用户,角色和权限等实体来确定 身份验证和授权操作。
您可以实施它以与任何来源进行交互,以查找用户及其权限。如果要与基于SQL的数据库进行交互,则可以执行此操作。如果要与文本文件进行交互,则可以执行此操作。如果您想与Web服务进行交互,也可以这样做。
Realm
有两个有用(几乎必要)的扩展,AuthenticatingRealm
和AuthorizingRealm
。它们分别为身份验证和授权服务提供接口。 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
。这个类对数据库的结构做了一些假设,但你可以自定义它。