2011-10-18 21 views
5

tôi đã thực hiện UserDetailsService, nó sẽ trả về một thể hiện của MyUser (mà thực hiện UserDetails)Tiếp cận đối tượng người dùng tùy chỉnh của tôi trong trang jsp, sử dụng lò xo 3 an ninh

public MyUser loadUserByUsername(String arg0) 

Bây giờ tôi muốn truy cập getters tùy chỉnh của tôi/lĩnh vực trên MyUser trong các trang JSP của tôi, cho đến nay tôi nhận điều này:

${pageContext.request.userPrincipal.name} 

Nhưng điều đó chỉ cho phép truy cập đến một đối tượng Principal. Làm cách nào để truy cập đối tượng MyUser?

Trả lời

7

dễ dàng của nó trong trang jsp tôi thêm này:

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> 
... 
<sec:authentication property="principal.firstname" /> 

đâu chính thực sự là một thể hiện của myuser, vì vậy "firstname" có thể là bất kỳ thu khí tùy chỉnh và setters tôi

2

Nếu đối tượng MyUser của bạn triển khai Principal và bạn đặt nó trong phiên http khi đăng nhập thành công, bạn có thể lấy nó từ phiên và truyền nó.


Bạn có thể thực hiện các AuthenticationSuccessHandler tiêm UserDetailsService của bạn trong đó và đặt nó trong phiên.

Sau đó, bạn có thể tiêm AuthenticationSuccessHandler vào UsernamePasswordauthenticationFilter xử lý phần tử <form-login>.

Nếu bạn cung cấp cho tôi chi tiết về cấu hình ngữ cảnh bảo mật của bạn, tôi có thể cung cấp thêm chi tiết cho bạn.

+0

Tôi đồng ý 100%, làm cách nào để "đặt nó trong phiên http khi đăng nhập thành công, bạn có thể lấy nó từ phiên và truyền nó. " – NimChimpsky

+0

@NimChimpsky dán một số phần có liên quan của cấu hình bảo mật của bạn. Tôi sẽ chỉnh sửa câu trả lời của mình với chi tiết hơn một chút. – Simeon

+0

thnx để được trợ giúp của bạn, tôi có biện pháp an toàn, sẽ đăng nó. – NimChimpsky

6

Sau khi phân tích HTTPSesson, ngay sau khi đăng nhập thành công, tôi phát hiện ra rằng có một thuộc tính có tên là SPRING_SECURITY_CONTEXT. Ví dụ: tùy chỉnh UserDetails của tôi có đối tượng có tên là người dùng, trong đó có thuộc tính firstName. Trong JSP, giá trị của tài sản này có thể đạt được như sau:

${sessionScope.SPRING_SECURITY_CONTEXT.authentication.principal.user.firstName} 
+1

cho tôi '$ {sessionScope.SPRING_SECURITY_CONTEXT.authentication.principal.email}' hoạt động như tôi cũng có thể thấy ngay cả trong thẻ '' chúng tôi nhận được 'principal.firstname' –

Các vấn đề liên quan