Я пытаюсь выполнить аутентификацию сервлета, работающего в Tomcat 6, используя Shiro.Использование JDBCRealm для аутентификации пользователя с помощью Shiro
У меня есть следующий 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 | [email protected]********* | 1 | ojSiTecNwRF0MunGRvz3DRSgP7sMF9EAR77Ol/2IAY8= | eHp9XedrIUa5sECfOb+KOA== |
+----------+------------------+----------+----------------------------------------------+--------------------------+
1 row in set (0.00 sec)
Если я использую SimpleCredentialsManager
он проверяет подлинность штрафа в отношении открытого текста пароля в таблице пользователей , Попытка использовать PasswordMatcher
была крайне расстраивающей.
Пароль и пароль_salt были получены с помощью утилиты shiro-tools Hasher
.
При попытке аутентификации на базовом HelloWorld
сервлета я использую для тестирования (путь = отдых/привет, контекст =/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:
[email protected]
]
(Полный журнал в https://gist.github.com/recurse/5915693)
Похоже, что пытается загрузить мой хешированный пароль в качестве имени класса. Является ли это ошибкой или ошибкой конфигурации с моей стороны? Если это ошибка, как я могу ее обойти? Если это ошибка конфигурации, что мне не хватает?
только то, что я искал, спасибо, кстати вы следовать любому учебнику для такого рода настройки? Я пытался интегрировать область jdbc с sha-хэшами и не мог найти подходящих учебников. – abdu
Нет. Я прочитал документацию на сайте Shiro, чтобы понять основную структуру API; затем я проверил код и обратный дизайн JDBC. – Recurse