【发布时间】:2013-06-30 16:51:25
【问题描述】:
我正在尝试使用 Shiro 验证在 Tomcat 6 中运行的 servlet。
我有以下 shiro.ini 文件:
[main]
ps = org.apache.shiro.authc.credential.DefaultPasswordService
pm = org.apache.shiro.authc.credential.PasswordMatcher
pm.passwordService = $ps
aa = org.apache.shiro.authc.credential.AllowAllCredentialsMatcher
sm = org.apache.shiro.authc.credential.SimpleCredentialsMatcher
jof = org.apache.shiro.jndi.JndiObjectFactory
jof.resourceName = jdbc/UserDB
jof.requiredType = javax.sql.DataSource
jof.resourceRef = true
realm = org.apache.shiro.realm.jdbc.JdbcRealm
realm.permissionsLookupEnabled = true
realm.credentialsMatcher = $pm
; Note factories are automatically invoked via getInstance(),
; see org.apache.shiro.authc.config.ReflectionBuilder::resolveReference
realm.dataSource = $jof
securityManager.realms = $realm
[urls]
/rest/** = authcBasic
/prot/** = authcBasic
我的数据库中有以下内容:
mysql> select * from users;
+----------+------------------+----------+----------------------------------------------+--------------------------+
| username | email | verified | password | password_salt |
+----------+------------------+----------+----------------------------------------------+--------------------------+
| admin | a.muys@********* | 1 | ojSiTecNwRF0MunGRvz3DRSgP7sMF9EAR77Ol/2IAY8= | eHp9XedrIUa5sECfOb+KOA== |
+----------+------------------+----------+----------------------------------------------+--------------------------+
1 row in set (0.00 sec)
如果我使用SimpleCredentialsManager,它会根据用户表中的明文密码进行身份验证。尝试使用PasswordMatcher 非常令人沮丧。
password 和 password_salt 是通过 shiro-tools Hasher 实用程序获得的。
当我尝试针对用于测试的基本 HelloWorld servlet (path=rest/hello, context=/ws) 进行身份验证时,我在日志中得到以下信息:
15:35:38.667 [http-8080-2] TRACE org.apache.shiro.util.ClassUtils - Unable to load clazz named [ojSiTecNwRF0MunGRvz3DRSgP7sMF9EAR77Ol/2IAY8=] from class loader [WebappClassLoader
context: /ws
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@79ddd026
]
(完整日志https://gist.github.com/recurse/5915693)
它似乎试图将我的散列密码加载为类名。这是一个错误,还是我的配置错误?如果它是一个错误,我该如何解决它?如果是配置错误,我错过了什么?
【问题讨论】:
-
正是我想要的,谢谢,顺便说一句,您是否按照任何教程进行了这种设置?我试图将我的 jdbc 领域与 sha 哈希集成,但找不到任何相关教程。
-
没有。我阅读了 Shiro 网站上的文档以了解 API 的基本结构;然后,我检查了代码并对 JDBC 配置进行了逆向工程。
-
在
shiro.ini的哪个位置指定您使用users表?