Добрый день,
Я создаю веб-приложение в Java, используя обычный JDBC
Я имею следующую архитектуру: Domain Model - Service Layer - DAO Layer
Service Layer является средний человек в CRUD операций
пароль и passhash практики обработки Java веб-приложение
Мой класс Пользователь имеет поле «пароль» (User.password)
Мой стол пользователя в БД имеет столбец «pass_hash»
я использую Bcrypt из spring.security и поэтому не хранить соль как отдельный колонка
Вопросы:
- Какие поля мне нужно иметь в модельном слое домена для обработки паролей? поле пароля? поле passHash? оба поля? другие мысли?
- После чтения переполнения стека я поймал идею не включать pass_hash, когда создаю экземпляр пользователя, если это действительно необходимо для целей безопасности. Вопрос в том, какой слой я должен опустить pass_hash: DAO? Сервисный уровень? Уровень DAO AFAIU должен отвечать только за связь с БД, поэтому я не делаю там дополнительных фильтров и не читаю пользователя из db полностью с pass_hash. Затем я устанавливаю пароль на нуль на уровне службы, как вы видите в методе чтения ниже.
- Какой слой должен содержать хеширование: DAO/Service? Я использую сервис (метод создания ниже)
UserService методы Пример
@Override
public Long create(User user) {
String hashedPassword = BCrypt.hashpw(user.getPassword(),
BCrypt.gensalt(BCRYPT_SALT_LOG_ROUNDS));
user.setPassword(hashedPassword);
return userDao.create(user);
}
@Override
public User read(Long id) {
User user = userDao.read(id);
if (user != null) {
user.setPassword(null);
}
return user;
}
Спасибо
Может быть, вы могли бы так любезно рассказать, что не так с моим вопросом, вместо того, чтобы ставить «-» без комментариев. – Sabine