2009-12-08 13 views
20

जब Spring Security उपयोगकर्ता को प्रमाणित करता है, तो यह उपयोगकर्ताDetail ऑब्जेक्ट बनाता है और यह वेब-ऐप में वर्तमान UserId को खोजने के लिए उपलब्ध है। लेकिन मान लीजिए कि मैं कस्टमर ऑब्जेक्ट ऑब्जेक्ट को वरीयताओं और अन्य विवरणों के साथ उपयोगकर्ता विवरण के साथ रखना या उपयोगकर्ता विवरण को बदलना चाहता हूं।स्प्रिंग सिक्योरिटी उपयोगकर्ता को उत्तेजित करते समय सत्र में कस्टम उपयोगकर्ता ऑब्जेक्ट का प्रबंधन कैसे करें?

तो, वसंत सुरक्षा सफलतापूर्वक प्रमाणीकृत करते समय सत्र में कस्टम उपयोगकर्ता ऑब्जेक्ट को कैसे जोड़ें? और वसंत सुरक्षा लॉग-इन उपयोगकर्ता लॉग आउट करते समय सत्र से कस्टम उपयोगकर्ता ऑब्जेक्ट को कैसे निकालें।

या क्या ऐसा करने का कोई उचित तरीका है?

+2

मुझे प्यार है जब कोई पूछता है कि मैं क्या पूछना चाहता हूं! – Adelin

उत्तर

18

इस आईएमओ को करने का सबसे अच्छा तरीका है आपकी सेवाओं में से एक (शायद उपयोगकर्ता सेवा) उपयोगकर्ताDetailsService को लागू करें और वसंत सुरक्षा एक्सएमएल में निर्दिष्ट करें कि आप अपनी खुद की उपयोगकर्ता विवरण सेवा का उपयोग करना चाहते हैं।

क्या उपयोगकर्ताDetailsService को करने की आवश्यकता होगी लोडब्यू उपयोगकर्ता नाम (स्ट्रिंग उपयोगकर्ता नाम) विधि लागू करें। इस विधि को उस श्रेणी को वापस करने की आवश्यकता होगी जो उपयोगकर्ता विवरण लागू करता है। यह आपकी खुद की कस्टम ऑब्जेक्ट हो सकती है जो आपको पसंद है। इसका लाभ यह है कि आप वसंत सुरक्षा टैगलिब के माध्यम से किसी जेएसपी से ऑब्जेक्ट की गुणों तक पहुंच सकते हैं और यह हमेशा वसंत सुरक्षा में सुरक्षा कॉन्टेक्स्टहोल्डर सिंगलटन (थ्रेड सुरक्षित) से भी उपलब्ध है। example usage

आशा इस मदद करता है

संपादित करें:: spring security manual, chapter 8 यहाँ एक ब्लॉग पोस्ट पासवर्ड एन्क्रिप्शन के लिए एक कस्टम उपयोगकर्ता जानकारी सेवा को लागू करने के बारे में बात है:

यहाँ इस के लिए डॉक्स के लिए एक लिंक है उल्लेख करने के लिए भूल कि ऑब्जेक्ट को सुरक्षा संदर्भ और लॉगआउट पर सत्र से हटा दिया जाएगा। इसके बारे में सबसे उपयोगी यह है कि यह वसंत सुरक्षा द्वारा पूरी तरह से प्रबंधित है।

0

आपको निश्चित रूप से अपना खुद का UserDetailService लिखना होगा। प्रिंसिपल ऑब्जेक्ट में उपयोगकर्ता है और AuthenticationToken में एक विवरण ऑब्जेक्ट भी है जिसे आप अन्य लॉगिन जानकारी के मानचित्र (स्ट्रिंग, स्ट्रिंग) को स्टोर कर सकते हैं।

public class RequestFormDeatils extends SpringSecurityFilter { 

    protected void doFilterHttp(HttpServletRequest request, ...) { 
     SecurityContext sec = SecurityContextHolder.getContent(); 
     AbstractAuthenticationToken auth = (AbstractAuthenticationToken)sec.getAuthentication(); 
     Map<String, String> m = new HashMap<String, String>; 
     m.put("myCustom1", request.getParameter("myCustom1")); 
     m.put("myCustom2", request.getParameter("myCustom2")); 
     auth.setDetails(m); 
} 

अब आप अपने कोड में कहीं भी आप SecurityContext का उपयोग अपने UserDetails वस्तु के लिए यह जोड़ी के बिना इस सुरक्षा से संबंधित जानकारी का प्रचार, या तर्क के रूप में यह पारित करने के लिए मिलता है। मैं वसंत सुरक्षा फ़िल्टर श्रृंखला के अंत में SecurityFilter में यह कोड करता हूं।

<bean id="requestFormFilter" class="...RequestFormDetails"> 
    <custom-filter position="LAST" /> 
</bean> 

जब उपयोगकर्ता (लॉग आउट के समय की तरह) निकाल दिया जाता है यह जानकारी हटा दिया जाएगा।  

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