- Lợi ích để lấy mã số chính là một tham số
Principal principal
trong bộ điều khiển lò xo và sau đó chuyển nó tới lớp dịch vụ trên lớp dịch vụ ngay lập tức mặc dùSecurityContextHolder.getContext().getAuthentication().getPrincipal()
? - Cách tiếp cận tốt nhất để có được các chi tiết chính trong lớp dịch vụ mà không cần kiểm tra
getAuthentication()
vàgetPrincipal()
đối tượng cho null ở khắp mọi nơi (một cái gì đó giống như trình bao bọc tùy chỉnh)?
Trả lời
-
- API dịch vụ của bạn sẽ dễ dàng hơn để sử dụng. Bạn sẽ thấy sự phụ thuộc vào hiệu trưởng trực tiếp, vì vậy bạn không thể gọi một số phương thức dịch vụ do nhầm lẫn trong môi trường mà hiệu trưởng không tồn tại.
- Nói chung, ít phụ thuộc hơn vào mã SpringSecurity có nghĩa là ít sự cố trong trường hợp di chuyển sang phiên bản Spring Security mới.
- Bạn sẽ có thể sử dụng lại lớp dịch vụ của mình trong môi trường mà Spring Security không tồn tại.
- Chuẩn bị một số lớp trình bao bọc (ví dụ: AuthenticationService). Thêm phương thức getPrincipal() vào nó. Thực hiện kiểm tra của bạn. Tiêm AuthenticationService ở khắp mọi nơi được insted của các cuộc gọi trực tiếp đến SecurityContextHolder.
Nếu tôi cần lấy một số dữ liệu cho người dùng cụ thể, tôi nghĩ việc nhận được hiệu trưởng (tên người dùng) trong lớp dịch vụ an toàn hơn vì có ít lớp giữa (hạn chế) và cơ sở dữ liệu. Vì vậy, đó là dao duy nhất còn lại như trái ngược với nhận được hiệu trưởng trong bộ điều khiển (lớp dịch vụ bổ sung giữa). Nhưng mặt khác, như bạn đã nói, lớp dịch vụ có thể tái sử dụng nhiều hơn. Bạn nghĩ gì về điều này? – Alex
Một đối tượng chính được giữ và giữ bởi lớp web. Vì vậy, đối với tôi có vẻ tự nhiên rằng một hiệu trưởng đến từ contoller đến lớp dịch vụ. Một điểm khác là phụ thuộc tĩnh là xấu đối với thử nghiệm đơn vị: http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/. Tôi không thấy bất kỳ vấn đề bảo mật nào vì một cá thể pincipal là không thay đổi (và thông thường mật khẩu sẽ được xác định từ thực hiện thực tế tại thời điểm này). Xin lỗi vì đã trì hoãn. Tôi đã AFK thời gian dài. –
Có an toàn khi sử dụng tùy chọn 2 của bạn trong BaseService mở rộng (trong lớp dịch vụ) không? – Alex
- 1. Nhận bối cảnh trong Dịch vụ
- 2. Bảo mật mùa xuân đảm bảo lớp dịch vụ, lớp dịch vụ web hoặc cả hai?
- 3. Spring MVC + Đăng nhập bảo mật mùa xuân bằng dịch vụ web còn lại
- 4. Tôi có thể có nhiều bối cảnh bảo mật với bảo mật mùa xuân không?
- 5. Nhận bối cảnh từ NativeActivity
- 6. Tại sao Spring MVC cần ít nhất hai bối cảnh?
- 7. Yêu cầu dịch vụ web bảo mật
- 8. Cà phê kịch bản - bảo bối cảnh lớp học và bối cảnh sự kiện
- 9. Mật khẩu bảo vệ dịch vụ REST?
- 10. Bảo mật mùa xuân Dịch vụ RememberMe với Cookie phiên
- 11. Cách bảo mật quyền truy cập vào tài nguyên tĩnh trong Spring
- 12. Cách bảo mật dịch vụ web trong .net?
- 13. Bối rối bối cảnh - Spring instantiating singleton beans hai lần
- 14. Truy cập dữ liệu và bảo mật trong lớp dịch vụ (Doctrine & ZF)
- 15. Cảnh báo bảo mật IE8
- 16. Cách đặt đúng URL dịch vụ trong thuộc tính dịch vụ CAS của Spring
- 17. Kiến trúc ứng dụng ASP.NET MVC "nguyên tắc"
- 18. Junit để kiểm tra dịch vụ Spring và lớp DAO
- 19. Tạo các dịch vụ web bảo mật với ColdFusion
- 20. Lớp DAO và Dịch vụ chính xác trong khung công tác Spring là gì?
- 21. Xuân cung cấp dịch vụ xác thực bảo mật tuỳ chỉnh ldap
- 22. Cách gửi Hình ảnh từ Dịch vụ Web trong Spring
- 23. Nhận bối cảnh ngoại lệ trong PHP
- 24. Spring Tomcat và tài nguyên tĩnh và mvc: tài nguyên
- 25. Bảo mật mùa xuân oauth2 - nhận dữ liệu tùy chỉnh từ mã OAuth2 chính
- 26. Các nguyên tắc SOA - một dịch vụ có nên gọi một dịch vụ khác không?
- 27. Làm thế nào để có bối cảnh an ninh mùa xuân trong bối cảnh con
- 28. nguyên cảo bối cảnh sai này
- 29. Apache CXF: Cách bảo mật dịch vụ web JAX-RS với xác thực cơ bản
- 30. Đảm bảo dịch vụ web?
Bạn có thể tìm thấy câu trả lời cho [câu hỏi này] (http://stackoverflow.com/questions/248562/when-using-spring-security-what-is-the-proper-way-to-obtain- current-username-i) hữu ích. [Câu trả lời này] (http://stackoverflow.com/questions/8764545/best-practice-for-getting-active-users-userdetails/8765597#8765597) cũng có thể hữu ích. –
Có một giải pháp tốt để có lớp trừu tượng với phương thức tĩnh, nơi tôi có thể đặt 'SecurityContextHolder.getContext(). GetAuthentication(). GetPrincipal()'? Sau đó tôi có thể sử dụng nó trong lớp dịch vụ. – Alex
Đọc liên kết thứ hai tôi đã cung cấp cho bạn một lần nữa. Không có gì ngăn bạn sử dụng cách tiếp cận đó trong các dịch vụ của bạn và nếu bạn sử dụng một giao diện, bạn cũng có thể trao đổi nó để thử nghiệm. –