Аутентификация пользователя с помощью гибернации

#java #hibernate #authentication #password-protection

#java #гибернация #аутентификация #защита паролем

Вопрос:

я новичок в гибернации. Я хотел бы создать простую систему аутентификации / входа в систему на Java с помощью гибернации.

Итак, допустим, у меня есть класс User

 public class User {

private int id;
private String username;
private String passwordHash;
...
}
  

Теперь у меня есть DAO для хранения нового пользователя и получения всех пользователей (в виде списка). Теперь мне интересно, возможно ли получить список пользователей без поля PasswordHash (по соображениям безопасности)?

Было бы неплохо, если бы это был вопрос конфигурации.

Другой идеей было бы разделить класс User на

 public class User {

private int id;
private String username;
...
}


public class UserWithPassword extends User {

private String passwordHash;
...
}
  

Поэтому я мог бы использовать UserWithPassword для сохранения нового пользователя в базе данных и использовать
класс User для запроса списка всех пользователей (без пароля).

Есть другие предложения?

Ответ №1:

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

Ваш DAO не должен возвращать сам класс. Вы можете написать запрос HQL, такой:

 select username
from User
  

Видите?

Тогда у вашего DAO будет такой метод, как общедоступная коллекция getUserNames()

Комментарии:

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

2. В этом случае вы могли бы сопоставить производный класс, затем в своем DAO создать экземпляры суперкласса и вернуть их коллекцию. Надеюсь, я понимаю смысл.

3. А как насчет конфигурации? Может ли это решить мою проблему?

4. Я думаю, что это решит вашу проблему, хотя я немного не понимаю, что вы подразумеваете под конфигурацией здесь. вы бы сопоставили гибернацию с UserWithPassword, а затем написали метод DAO, который извлекает все эти классы. Затем вы должны перебрать все это и создать нового пользователя (userWithPasswordInstance) и вернуть их в коллекцию.

5. Кроме того, в гибернации есть механизм для сопоставления супер- и подклассов, но я никогда этого не делал. Вы могли бы взглянуть на это. возможно, вы сможете сопоставить super и sub в одной таблице и прочитать любой, какой вам нравится.

Ответ №2:

вы можете использовать java.util.List temp = HibernateTemplate.find(«выбрать u из user u «);

вы можете взять всех пользователей из temp;

но если вы хотите пройти аутентификацию, вы можете использовать Spring security, я предлагаю