Я изучаю Spring и Spring Security прямо сейчас, и это был чрезвычайно полезный ответ в его деталях и ясности. Собирался немного помешаться, пытаясь выяснить, почему мое поле пароля не сохранялось в БД. Спасибо!
тоящее время я изучаю фреймворк Spring, уделяя основное внимание его модулю безопасности. Я посмотрел несколько руководств в связи с регистрацией и входом в систему. Я видел это общее использованиепреходящий ключевое слово или@Transient аннотация в поле пароля впользователь учебный класс.
Мое фиктивное приложение использует Spring Boot + Spring MVC + Spring Security + MySQL.
я знаю это
в Javaпреходящий Ключевое слово используется для обозначения того, что поле не должно быть сериализовано.
JPA-х@ Переходная аннотация...
... указывает, что свойство илиполе не является постоянным, Он используется для аннотирования свойства или поля класса сущности, сопоставленного суперкласса или встраиваемого класса.
и org.springframework.data.annotation's@ Переходная аннотация ...
Помечает поле как переходное для каркаса отображения. Таким образомсобственность не будет сохранена и не подвергается дальнейшей проверке в рамках картографии.
В моей базе данных MySQL у меня есть схема spring_demo, которая имеет 3 таблицы:
+-----------------------+
| Tables_in_spring_demo |
+-----------------------+
| role |
| user |
| user_role |
+-----------------------+
Когда я используюпреходящий ключевое слово в поле пароля в классе User, оно не будет храниться в базе данных MySQL. (пример: test01)
mysql> select * from user;
+----+--------+------------------+----------+
| id | active | email | username |
+----+--------+------------------+----------+
| 1 | 1 | [email protected] | test01 |
+----+--------+------------------+----------+
1 row in set (0,00 sec)
Когда я используюjavax.persistence @Transient аннотация к полю пароля в классе User, она также не будет храниться в базе данных MySQL. (пример: test02)
Но ... когда я используюorg.springframework.data.annotation @Transient аннотация к полю пароля в классе User, который он хранит в базе данных MySQL. (пример: test03)Это почему?
mysql> select * from user;
+----+--------+------------------+----------+--------------------------------------------------------------+
| id | active | email | username | password |
+----+--------+------------------+----------+--------------------------------------------------------------+
| 1 | 1 | [email protected] | test02 | |
| 2 | 1 | [email protected] | test03 | $2aпреходящийUbvmdhfcKxSNr/I4CjOLtOkKGX/j4/xQfFrv3FizxwEVk6D9sAoO |
+----+--------+------------------+----------+--------------------------------------------------------------+
2 rows in set (0,00 sec)
Мои основные вопросы: когда я использую аннотацию @Transient на основе spring.data, поле пароля сохраняется. Зачем? И почему я должен использовать аннотацию @Transient в поле пароля?
Спасибо за ваше руководство и помощь заранее!