2011-10-18 3 views
5

I wprowadziły UserDetailsService Spring 3, zwraca instancję MyUser (która implementuje UserDetails)dostęp do mojego niestandardowego obiektu użytkownika w jsp strony używając bezpieczeństwa

public MyUser loadUserByUsername(String arg0) 

Teraz chcę przejść moje niestandardowe pobierające/pól na MyUser w moich stronach JSP, tak dalece mam to:

${pageContext.request.userPrincipal.name} 

Ale który umożliwia dostęp do Principal obiektu tylko. Jak mogę uzyskać dostęp do obiektu MyUser?

Odpowiedz

7

jego łatwy w stronie JSP dodałem to:

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

Gdzie głównym jest faktycznie instancja myuser, więc „Imię” może być każdy z moich własnych pobierające i ustawiające

2

Jeśli twój obiekt implementuje Principal i umieścisz go w sesji http po pomyślnym zalogowaniu, możesz pobrać go z sesji i przesłać.


Można wdrożyć AuthenticationSuccessHandler wstrzykiwać UserDetailsService tam i umieścić ją w sesji.

Następnie można wprowadzić AuthenticationSuccessHandler do UsernamePasswordauthenticationFilter, który obsługuje element <form-login>.

Jeśli podasz mi szczegóły dotyczące konfiguracji kontekstu zabezpieczeń, mogę podać więcej szczegółów.

+0

Zgadzam się w 100%, jak mogę "umieścić go w sesji http po pomyślnym zalogowaniu, można go pobrać z sesji i przesłać. " – NimChimpsky

+0

@NimChimpsky wklej niektóre istotne części Twojej konfiguracji zabezpieczeń. Będę edytować moją odpowiedź z nieco większą szczegółowością. – Simeon

+0

thnx za pomoc, mam saltution, opublikuję. – NimChimpsky

6

Po przeanalizowaniu HTTPSesson, natychmiast po pomyślnym zalogowaniu, okazało się, że istnieje atrybut o nazwie SPRING_SECURITY_CONTEXT. Na przykład moje niestandardowe UserDetails ma obiekt o nazwie użytkownika, który ma własność firstName. W JSP wartość tej właściwości można osiągnąć za pomocą:

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

dla mnie „$ {sessionScope.SPRING_SECURITY_CONTEXT.authentication.principal.email}” pracował jako Mogę również zobaczyć nawet w „” tag otrzymujemy „principal.firstname” –

Powiązane problemy