@ Transient аннотация, @org.springframework.данные.аннотация.Переходная аннотация, переходное ключевое слово и хранение пароля
В настоящее время я изучаю Spring framework, в основном фокусируясь на его модуле безопасности. Я смотрел некоторые руководства в связи с регистрацией и логином. Я видел это общее использование транзиторная ключевое слово @Transient аннотация в поле Пароль в пользователей класса.
мой манекен приложение с использованием Spring загрузки + Весна в MVC + Весна безопасности + в MySQL.
Я знаю, что
в Java транзиторная ключевое слово используется для обозначения того, что поле не должно быть сериализовано.
JPA @Transient аннотация...
...указывает, что свойство или
1 ответов
в рамках Spring Framework вы можете использовать Mapping Framework для преобразования из одной формы в другую. Скажем, например, ваше приложение spring java server side должно отправлять информацию о пользователе клиенту (веб-страница,мобильное приложение) в формате JSON.
@Entity
public class User {
@Id
private long id;
@Column(name = "username")
private String username;
@Column(name = "email")
private String email;
@Column(name = "password")
private String password;
}
теперь, чтобы сопоставить этот объект сущности java с форматом JSON, вы можете использовать структуру сопоставления (e.G Джексон:com.fasterxml.jackson.databind.ObjectMapper
) или сделать это вручную.
вывод формата JSON, который вы получите, когда конвертировать объект user 2 в JSON is:
{
"id": 2,
"email": "test03@gmail.com",
"username": "test03",
"password": "a$UbvmdhfcKxSNr/I4CjOLtOkKGX/j4/xQfFrv3FizxwEVk6D9sAoO"
}
теперь, если вы добавлено :
@org.springframework.data.annotation.Transient
@Column(name = "password")
private String password;
а затем использовал сопоставление Framwwork для повторного создания JSON для сущности user 2, которую вы получите:
{
"id": 2,
"email": "test03@gmail.com",
"username": "test03",
}
обратите внимание, что поле пароля отсутствует в выводе JSON. Это потому что @org.springframework.data.annotation.Transient
специально указывает на Spring framework, что используемый вами Сопоставитель объектов не должен включать это значение при преобразовании из объекта Java в JSON.
обратите внимание, если вы пытались сохраняйте вышеуказанный объект в базе данных, он все равно сохранит его в базе данных, потому что @org.springframework.data.annotation.Transient
только applys к фреймворкам отображения объектов, а не JPA.
в итоге:
transient
для всех сериализаций (по проводу, сохранение на диск, сохранение в БД)javax.persistence.Transient
специально для сериализации JPA DB@org.springframework.data.annotation.Transient
предназначен для сериализации фреймворка ObjectMapping, используемой в Spring