Hiện tại tôi đang tìm hiểu khung công tác Spring, chủ yếu tập trung vào Mô-đun bảo mật. Tôi đã xem một số hướng dẫn liên quan đến đăng ký và đăng nhập. Tôi đã thấy cách sử dụng phổ biến này của thoáng qua từ khóa hoặc @Transient chú thích trên trường mật khẩu trong lớp Người dùng.Chú thích @Transient, chú thích @ org.springframework.data.annotation.Transient, từ khóa tạm thời và lưu trữ mật khẩu
Ứng dụng giả của tôi đang sử dụng Spring Boot + Spring MVC + Spring Security + MySQL.
Tôi biết rằng thoáng qua từ khóa
Java được sử dụng để biểu thị rằng một lĩnh vực không phải là để được đăng.
JPA của @Transient chú thích ...
... xác định rằng tài sản hoặc lĩnh vực không phải là dai dẳng. Nó được sử dụng để chú thích một thuộc tính hoặc một trường của một lớp thực thể, lớp cha được ánh xạ hoặc lớp có thể nhúng.
và org.springframework.data.annotation's @ chú thích thông tin ...
Đánh dấu trường là tạm thời cho khung bản đồ. Do đó, thuộc tính sẽ không được giữ nguyên và không được kiểm tra thêm bởi khung bản đồ.
Trong db MySQL của tôi, tôi có schema spring_demo của tôi trong đó có 3 bảng:
+-----------------------+
| Tables_in_spring_demo |
+-----------------------+
| role |
| user |
| user_role |
+-----------------------+
Khi tôi đang sử dụng thoáng từ khóa trên các lĩnh vực mật khẩu int lớp người dùng, nó sẽ không được được lưu trữ trong db của MySQL. (Ví dụ: test01)
mysql> select * from user;
+----+--------+------------------+----------+
| id | active | email | username |
+----+--------+------------------+----------+
| 1 | 1 | [email protected] | test01 |
+----+--------+------------------+----------+
1 row in set (0,00 sec)
Khi tôi đang sử dụng javax.persistence @Transient chú thích trên các lĩnh vực mật khẩu trong lớp dùng, nó cũng sẽ không được lưu trữ trong db MySQL. (ví dụ: test02)
Nhưng ... khi tôi đang sử dụng chú thích org.springframework.data.annotation @Transient trên trường mật khẩu trong lớp Người dùng nó được lưu trữ trong db của MySQL. (ví dụ: test03) Tại sao lại như vậy?
mysql> select * from user;
+----+--------+------------------+----------+--------------------------------------------------------------+
| id | active | email | username | password |
+----+--------+------------------+----------+--------------------------------------------------------------+
| 1 | 1 | [email protected] | test02 | |
| 2 | 1 | [email protected] | test03 | $2a$10$UbvmdhfcKxSNr/I4CjOLtOkKGX/j4/xQfFrv3FizxwEVk6D9sAoO |
+----+--------+------------------+----------+--------------------------------------------------------------+
2 rows in set (0,00 sec)
câu hỏi chính của tôi là, khi tôi đang sử dụng chú thích @Transient spring.data dựa trường mật khẩu đã kéo dài. Tại sao? Và tại sao tôi nên sử dụng bất kỳ chú thích @Transient nào trên trường mật khẩu?
Cảm ơn bạn đã hướng dẫn và trợ giúp trước!
Nếu mục đích không bỏ qua trường đó trong khi lưu, bạn có thể sử dụng @Tran sient riêng tư tạm thời Mật khẩu chuỗi; –
Tôi đang học Spring and Spring Security ngay bây giờ và đây là một câu trả lời vô cùng hữu ích trong chi tiết và rõ ràng của nó. Đã đi một bonkers ít cố gắng tìm ra lý do tại sao lĩnh vực mật khẩu của tôi đã không bền bỉ cho db. Cảm ơn bạn! – justinraczak