Я искал повсюду, не повезло, что я пытаюсь сделать.Как хранить хэшированные pws в db с Apache Shiro?
Я ищу хэш и солью своих паролей пользователей и храню их в БД. Проблема в том, как я их храню?
Я посмотрел на это http://shiro.apache.org/realm.html#Realm-authentication, на котором я нашел похожие ответы, но это не имеет смысла.
import org.apache.shiro.crypto.hash.Sha256Hash;
import org.apache.shiro.crypto.RandomNumberGenerator;
import org.apache.shiro.crypto.SecureRandomNumberGenerator;
...
//We'll use a Random Number Generator to generate salts. This
//is much more secure than using a username as a salt or not
//having a salt at all. Shiro makes this easy.
//
//Note that a normal app would reference an attribute rather
//than create a new RNG every time:
RandomNumberGenerator rng = new SecureRandomNumberGenerator();
Object salt = rng.nextBytes();
//Now hash the plain-text password with the random salt and multiple
//iterations and then Base64-encode the value (requires less space than Hex):
String hashedPasswordBase64 = new Sha256Hash(plainTextPassword, salt, 1024).toBase64();
User user = new User(username, hashedPasswordBase64);
//save the salt with the new account. The HashedCredentialsMatcher
//will need it later when handling login attempts:
user.setPasswordSalt(salt);
userDAO.create(user);
Пользователь ни «UserDAO» существует в настоящее время от того, что я вижу, и все эти примеры, кажется, использовать старые примеры Shiro.
Когда я смотрю на «PasswordService» Javadoc я прочитал
Создание учетной записи или сброса пароля
Whenever you create a new user account or reset that account's password,
мы должны перевести конечного пользователя, представленный сырец/открытого текста значение пароля в формате строки, что гораздо безопаснее хранить. Вы делаете это, вызывая метод шифрования encryptPassword (Object) для создания более безопасного значения. Например:
String submittedPlaintextPassword = ...
String encryptedValue = passwordService.encryptPassword(submittedPlaintextPassword);
...
userAccount.setPassword(encryptedValue);
userAccount.save(); //create or update to your data store
Be sure to save this encrypted password in your data store
and never the original/raw submitted password.
но что такое "userAccount?"
Много раз документация очень расплывчата.
Однако я заметил есть класс «SubjectDAO», но ни один класс UserDAO ...
Так что да, я запутался, что делать дальше, так что если кто-нибудь может помочь мне, что я был бы признателен, значительно !
Большое спасибо!
Я не очень хорошо знаком с настойчивостью, поэтому спасибо за информацию. Я понял, что все сферы занимались всем, а не только чтением ... Я слышал, что Весна учится много, но я провел много времени с Сиро. Мне это нравится, но документации недостаточно. Я предполагаю, что в некотором смысле я могу взять сгенерированный пароль и использовать SQL-запрос для добавления его в БД или использовать какой-то API-интерфейс для сохранения? Кажется, что настойчивость в наши дни является чем-то предпочтительным, но я новичок в этом, поэтому не знаю. Почему вам нравится весна больше, чем сиро? thanks – XaolingBao
Да, вы можете использовать простые JDBC-запросы для реализации уровня Persistence, но с использованием API сокращает время. Весенняя экологическая система легко учится хорошо работать вместе. Spring Security, подобная Shiro, является наиболее широко используемым API для безопасности. – shazin
Спасибо, поэтому я думаю, что буду использовать регулярные запросы, но, возможно, лучше изучить JPA. Любые советы по слоям Persistence? Возможно, вы, наверное, один из первых, кто сказал, что это легко, даже глядя на сиро против весны, показывает, что многие люди говорят о том, как сложно или «сложно», но я сам не смотрел на него. Я слышал, что Весна используется повсюду, поэтому я не сомневаюсь, что она большая. Shiro показалось легким, и у него было много чего предложить, но определенно потребовалось некоторое время, чтобы настроить его (и все еще требуется время). Спасибо за помощь! – XaolingBao