Я переписываю старое приложение Java для настольных компьютеров в приложение JSF, используя PrimeFaces.
Старое приложение не использовало спящий режим, но я решил использовать его в новом приложении. Все работает нормально, но проблема в том, что я хочу сохранить пароли в спящем режиме, используя функцию MySql password().
Есть ли способ сделать это, потому что было бы неплохо, если бы я мог импортировать данные из старой базы данных в новую базу данных без смены паролей.
Мне удалось заставить логин работать, используя этот фрагмент кода:
public User login(String username, String password) {
User result = null;
Session session = HibernateUtil.getSessionFactory().openSession();
try {
String sql = "select s from User where username=:username and password=password(:password)";
Query query = session.createQuery(sql);
query.setString("username", username);
query.setString("password", password);
result = (User) query.uniqueResult();
if (result != null) {
Hibernate.initialize(result.getUserData());
}
}
finally {
session.close();
}
return result;
}
Но вот с регистрацией новых пользователей проблема, так как я не умею хранить пароли. Код, который я использую для сохранения пользователей в базе данных, выглядит так:
public User addUser(User obj) {
Session session = HibernateUtil.getSessionFactory().openSession();
try {
session.save(obj);
session.flush();
}
finally {
session.close();
}
return obj;
}
Я знаю, что мог бы написать весь оператор вставки по старинке, но какой смысл тогда использовать спящий режим, а то код будет выглядеть уродливо. Также меня не устраивает фрагмент входа в систему. Я также пытался обновить пароль с помощью триггера после вставки, но постоянно получал ошибку:
Updating of NEW row is not allowed in after trigger
Поэтому я отказался от этого подхода, так как он уродлив и не работает.
Должен ли я просто использовать jasypt или любую другую библиотеку для шифрования паролей в приложениях и покончить с этим? Или есть элегантное решение моей проблемы.