2013-12-23 2 views
3

Вот мой сиро конфигурацииShiro с JDBC и хэшированные пароли

[main] 
authc.loginUrl = /site/index.jsp 
authc.usernameParam = user 
authc.passwordParam = pass 
authc.rememberMeParam = remember 
authc.successUrl = /site/home.jsp 


jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm 
jdbcRealm.permissionsLookupEnabled=true 
jdbcRealm.authenticationQuery = select password from users where username = ? 
jdbcRealm.userRolesQuery = select role from users where username = ? 

credentialsMatcher = org.apache.shiro.authc.credential.HashedCredentialsMatcher 
credentialsMatcher.hashAlgorithmName = SHA-256 
credentialsMatcher.storedCredentialsHexEncoded = true 
credentialsMatcher.hashIterations = 5000 
jdbcRealm.credentialsMatcher = $credentialsMatcher 



jof = org.apache.shiro.jndi.JndiObjectFactory 
jof.resourceName = jdbc/postgres 
jof.requiredType = javax.sql.DataSource 
jof.resourceRef = true 
jdbcRealm.dataSource = $jof 
securityManager.realms = jdbcRealm 

[urls] 
/theme/** = anon 
/site/** = authc 
/site/cards.jsp = roles[smoto,admin] 
/site/jobs.jsp = roles[admin] 

Я создал хэш, как это для администратора пароля администратора

String hashedPassword = new Sha256Hash("admin", "",5000).toHex(); 

Я вставил хэш в БД, но моя ошибка аутентификации каждый время, у кого-нибудь есть опыт работы с подобными настройками с сиро? Также как я могу включить отладку или протоколирование для сиро?

EDIT: здесь правильный набор для такого рода проверки подлинности, нашел его в другом StackOverflow темы

[main] 
authc.loginUrl = /site/index.jsp 
authc.usernameParam = user 
authc.passwordParam = pass 
authc.rememberMeParam = remember 
authc.successUrl = /site/home.jsp 

jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm 
jdbcRealm.permissionsLookupEnabled=false 
jdbcRealm.authenticationQuery = select password from users where username = ? 
jdbcRealm.userRolesQuery = select role from users where username = ? 

ps = org.apache.shiro.authc.credential.DefaultPasswordService 
pm = org.apache.shiro.authc.credential.PasswordMatcher 
pm.passwordService = $ps 

jof = org.apache.shiro.jndi.JndiObjectFactory 
jof.resourceName = jdbc/postgres 
jof.requiredType = javax.sql.DataSource 
jof.resourceRef = true 

jdbcRealm.dataSource = $jof 
jdbcRealm.credentialsMatcher = $pm 

#securityManager.realms = jdbcRealm 

[urls] 
/theme/** = anon 
/site/** = authc 
/site/cards.jsp = roles[smoto,admin] 
/site/jobs.jsp = roles[admin] 

Хитрость заключается в том, чтобы использовать инструмент хэширования, который обеспечивает сиро и скопировать точный результат в базу данных поле «пароль», то вся строка будет содержать информацию о том, что используется алгоритм, сколько итераций и т.д., пример:

$shiro1$SHA-256$500000$salthere$hashhere 

ответ

6

Да, HashedCredentialsMatcher, в то время как достаточно, немного старше. Вероятно, вы найдете Shiro's newer PasswordMatcher более простым в использовании. Вы можете настроить свой внутренний PasswordService довольно легко:

[main] 
passwordService = org.apache.shiro.authc.credential.DefaultPasswordService 
#configure the passwordService to use the settings you desire 
#... 
passwordMatcher = org.apache.shiro.authc.credential.PasswordMatcher 
passwordMatcher.passwordService = $passwordService 
#... 
# Finally, set the matcher on a realm that requires password matching for account authentication: 
myRealm = ... 
myRealm.credentialsMatcher = $passwordMatcher 

Вы можете использовать экземпляр PasswordService в приложении для создания хэша пароля при создании учетной записи или обновлении пароля учетной записи:

String submittedPlaintextPassword = ... 
String encryptedValue = passwordService.encryptPassword(submittedPlaintextPassword); 
... 
userAccount.setPassword(encryptedValue); 
userAccount.save(); //create or update to your data store 

Просто убедитесь, что passwordService, настроенный в shiro.ini, имеет ту же конфигурацию, что и passwordService, используемый в вашем коде приложения.

+0

Есть ли способ зарегистрировать пароль на shiro.ini? Мое приложение всегда возвращает, что мой пароль прошел неправильно ... Я использую немного более сложное хеширование ... Пароль в моем db выглядит так: $ shiro1 $ SHA-256 $ 1028 $ 8Q4AlwW/3NloawqM4ijdQQ == $ DWE96wyrASHjA/vKCDFtSanDrw44L3wF1/DXPrJrtio = – Marcel

Смежные вопросы