@ 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