2011-10-18 6 views
5

मैं UserDetailsService को लागू किया है का उपयोग कर, यह MyUser का एक उदाहरण (जो UserDetails लागू करता है)jsp पेज में अपने कस्टम उपयोगकर्ता वस्तु को एक्सेस करना, वसंत 3 सुरक्षा

public MyUser loadUserByUsername(String arg0) 

अब मैं पर अपने कस्टम getters/क्षेत्रों तक पहुंचना चाहते हैं रिटर्न मेरी JSP पृष्ठों में MyUser, अब तक मैं यह मिल गया:

${pageContext.request.userPrincipal.name} 

लेकिन वह केवल एक Principal वस्तु का उपयोग करने की अनुमति देता है। मैं MyUser ऑब्जेक्ट तक कैसे पहुंच सकता हूं?

उत्तर

7

jsp पेज में अपनी आसान मैं इस कहा:

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

कहाँ प्रिंसिपल वास्तव में MyUser का एक उदाहरण है, इसलिए "firstname" मेरे कस्टम getters और setters के किसी भी

2

यदि आपकी MyUser ऑब्जेक्ट Principal लागू करता है और आप इसे सफल लॉगिन पर http सत्र में रखते हैं, तो आप इसे सत्र से प्राप्त कर सकते हैं और इसे कास्ट कर सकते हैं।


आप को लागू कर सकता है AuthenticationSuccessHandler वहाँ में अपने UserDetailsService इंजेक्षन और सत्र में रखें।

फिर आप अपने AuthenticationSuccessHandler को UsernamePasswordauthenticationFilter में इंजेक्ट कर सकते हैं जो <form-login> तत्व को संभालता है।

यदि आप मुझे अपनी सुरक्षा संदर्भ कॉन्फ़िगरेशन के बारे में विवरण देते हैं तो मैं आपको अधिक जानकारी दे सकता हूं।

+0

मैं 100% सहमत हूँ, मैं कैसे "सफल लॉगिन करके http सत्र में यह जगह है, तो आप सत्र से इसे पाने के लिए और इसे डाली सकता है। " – NimChimpsky

+0

@NimChimpsky कृपया अपनी सुरक्षा कॉन्फ़िगरेशन के कुछ प्रासंगिक हिस्सों को पेस्ट करें। मैं थोड़ा और विस्तार के साथ अपना जवाब संपादित करूंगा। आपकी सहायता के लिए – Simeon

+0

thnx, मेरे पास समाधान है, इसे पोस्ट करेगा। – NimChimpsky

6

हो सकता है विश्लेषण करने के बाद सफल लॉग इन के तुरंत बाद, HTTPSesson, मुझे पता चला कि SPRING_SECURITY_CONTEXT नामक एक विशेषता है। उदाहरण के लिए, मेरा कस्टम उपयोगकर्ता विवरण में उपयोगकर्ता नामक ऑब्जेक्ट है, जिसमें संपत्ति प्रथम नाम है। JSP में, इस संपत्ति के मूल्य को निम्न से पहुंचा जा सकता है:

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

मेरे लिए '$ {sessionScope.SPRING_SECURITY_CONTEXT.authentication.principal.email}' काम करता है क्योंकि मैं '' टैग में भी देख सकता हूं 'प्रिंसिपल। फर्स्टनाम' –

संबंधित मुद्दे