@Transitoire annotation @org.springframework.les données.annotation.Transitoire d'annotation, transitoire mot-clé et le mot de passe de stockage de
Actuellement, je suis en train d'apprendre le framework Spring, se concentrant principalement sur le Module de Sécurité. J'ai regardé quelques guides dans le cadre de l'enregistrement et de connexion. J'ai vu cette utilisation courante de transitoire mot-clé ou @Transitoire annotation sur le champ de mot de passe dans le Utilisateur classe.
Mon mannequin application utilise le Printemps de Démarrage + Spring MVC + Ressort + MySQL.
Je sais que
De Java transitoire mot-clé est utilisé pour indiquer qu'un champ est de ne pas être sérialisé.
JPA est @Transitoire annotation...
...indique que la propriété ou champ n'est pas persistant. Il est utilisé pour annoter un bien ou d'un champ d'une classe d'entité, tracé de la superclasse, ou intégrable classe.
et de l'org.springframework.les données.annotation du @Transitoire annotation...
Marque un champ transitoire pour le framework de mapping. Ainsi, le propriété ne sera pas persisté, et ne pas être inspectés par le framework de mapping.
Dans ma base MySQL, j'ai mon spring_demo schéma qui dispose de 3 tables:
+-----------------------+
| Tables_in_spring_demo |
+-----------------------+
| role |
| user |
| user_role |
+-----------------------+
Quand je suis en utilisant le transitoire mot clé sur le champ de mot de passe int l'Utilisateur de la classe, il ne serait pas stocké dans la base MySQL. (exemple: test01)
mysql> select * from user;
+----+--------+------------------+----------+
| id | active | email | username |
+----+--------+------------------+----------+
| 1 | 1 | test01@gmail.com | test01 |
+----+--------+------------------+----------+
1 row in set (0,00 sec)
Quand je suis en utilisant le javax.la persistance @Transitoire annotation sur le champ de mot de passe de l'Utilisateur de la classe, il ne sera également pas stockées dans la base MySQL. (exemple: test02)
Mais... quand je suis à l'aide de la org.springframework.les données.l'annotation @Transitoire annotation sur le champ de mot de passe de l'Utilisateur de la classe, il ne stockées dans les bases de données MySQL. (exemple: test03) Pourquoi est-ce?
mysql> select * from user;
+----+--------+------------------+----------+--------------------------------------------------------------+
| id | active | email | username | password |
+----+--------+------------------+----------+--------------------------------------------------------------+
| 1 | 1 | test02@gmail.com | test02 | |
| 2 | 1 | test03@gmail.com | test03 | $2a$10$UbvmdhfcKxSNr/I4CjOLtOkKGX/j4/xQfFrv3FizxwEVk6D9sAoO |
+----+--------+------------------+----------+--------------------------------------------------------------+
2 rows in set (0,00 sec)
Mes principales questions sont les suivantes, lorsque je suis en utilisant le printemps.les données en fonction @Transitoire annotation le champ mot de passe a persisté. Pourquoi? Et pourquoi devrais-je utiliser n'importe @Transitoire annotation sur un champ de mot de passe?
Je vous remercie pour vos conseils et votre aide à l'avance!
OriginalL'auteur F3R1 | 2017-03-12
Vous devez vous connecter pour publier un commentaire.
Dans le Cadre du Printemps, vous pouvez utiliser le Framework de Mapping pour convertir d'une forme à une autre. Disons, par exemple, votre source java côté serveur application doit envoyer à l'utilisateur des informations à un client (page web,application mobile) au format JSON.
Maintenant à la carte ce java entité de l'objet au format JSON, vous pouvez soit utiliser un framework de mapping (e.g jackson:
com.fasterxml.jackson.databind.ObjectMapper
) ou le faire manuellement.Le format JSON sortie que vous obtenez lorsque pour convertir l'utilisateur 2 objet JSON est:
Maintenant, si vous avez ajouté :
et ensuite utilisé la Cartographie Framwwork à générer du JSON pour l'utilisateur 2 de l'entité, vous obtenez:
Remarque le champ mot de passe est absent de vous sortie JSON. C'est parce que
@org.springframework.data.annotation.Transient
le précise le framework spring que l'Objet Mappeur vous utilisez ne doit pas inclure cette valeur lors de la conversion de Java Objet JSON.Noter que si vous avez essayé de persister au-dessus de l'entité dans la base de données, il serait encore l'enregistrer dans la base de données car
@org.springframework.data.annotation.Transient
seulement applys pour Objet de mappage de cadres pas JPA.Donc pour récapituler:
Je suis en train d'apprendre le Ressort et le droit de la Sécurité maintenant et ce fut un énorme répondre de façon utile dans ses détails et de clarté. Allait un peu dingue à essayer de comprendre pourquoi mon champ de mot de passe n'était pas la persistance de la db. Merci!!!!
OriginalL'auteur Shivam Sinha