2010-07-20 11 views
6

मेरे आवेदन में मैं एलडीएपी प्रमाणीकरण का उपयोग कर रहा हूं। लेकिन मेरे पास 2 दूरस्थ सेवाएं भी हैं जिनके लिए विधि लॉगिन (उपयोगकर्ता नाम, पासवर्ड) के माध्यम से प्रमाणीकरण की आवश्यकता है। विधि सुरक्षा टोकन लौटाती है जो मुझे अन्य तरीकों का आह्वान करने में सक्षम बनाती है, यानी मुझे पहले तर्क के रूप में सेवा विधियों को सुरक्षा टोकन पास करना चाहिए।
तो मैं एलडीएपी का उपयोग करके सफल लॉगिन के तुरंत बाद इन सुरक्षा टोकन प्राप्त करना चाहता हूं और उन्हें सुरक्षा कॉन्टेक्स्ट में स्टोर करना चाहता हूं। मैंने प्रमाणीकरण-सफलता-हैंडलर-रेफफॉर्म-लॉगिन तत्व का उपयोग करने का प्रयास किया। हैंडलर का उपयोग करके मैं कस्टम प्रमाणीकरण टोकन के साथ सुरक्षा कॉन्टेक्स्ट में प्रमाणीकरण ऑब्जेक्ट को प्रतिस्थापित करता हूं जिसमें न केवल पासवर्ड बल्कि सुरक्षा टोकन भी होते हैं। लेकिन इस मामले में मेरे पास एक अपवाद है कि कोई प्रमाणीकरण प्रदाता टोकन के इस वर्ग का समर्थन नहीं करता है। मुझे पता है कि HTTP सत्र में टोकन स्टोर करना भी संभव है लेकिन इस मामले में मुझे सेवा ऑब्जेक्ट में सत्र पास करना होगा, इसलिए मैं सुरक्षा कॉन्टेक्स्ट में टोकन स्टोर करना चाहता हूं।वसंत-सुरक्षा के सुरक्षा कॉन्टेक्स्ट में कस्टम जानकारी कैसे संग्रहीत करें?

सेवा सुरक्षा टोकन को संभालने का सबसे अच्छा तरीका क्या है?

उत्तर

10

मैं अक्सर Authentication.getDetails() वस्तु का उपयोग अतिरिक्त जानकारी है जो सीधे कहते प्रति उपयोगकर्ता से नहीं जोड़ा जा सकता है स्टोर करने के लिए। तो आप उस क्षेत्र में इच्छित किसी ऑब्जेक्ट को स्टोर कर सकते हैं (उदाहरण के लिए हैश मैप) और यह Authentication ऑब्जेक्ट लाइफ चक्र साझा करता है।

HashMap<String, Object> info = new HashMap<String, Object>(); 
info.put("extraInfo", "info"); 
auth.setDetails(info); 
... 
Map<String, Object> i = (Map<String, Object>)SecurityContextHolder.getContext().getAuthentication.getDetails(); 
4

'उपयोगकर्ता विवरण' के आपके कार्यान्वयन में कोई अतिरिक्त डेटा हो सकता है। यह सुरक्षा कोंटेक्स्ट में संग्रहीत हो जाता है जिसे बाद में सफल लॉगिन के बाद सुलभ किया जाता है।

आप इसे बाद में उपयोग कर सकते हैं (UserDetails लागू करता MyUserDetails मान लिया गया) के रूप में

Object principal = SecurityContextHolder.getContext().getAuthentication(); 
if (principal instanceof MyUserDetails) { 
    MyUserDetails mud = (MyUserDetails) principal; 
    mud.getMyData(); //Extract your additional data here 
} 
+0

मुझे यकीन नहीं है कि मैं उपयोगकर्ता DetailsSerivce का उपयोग LDAP प्रमाणीकरण के साथ कर सकता हूं। – viator

+1

आपको पूरे उपयोगकर्ता जानकारी सेवा को लागू करने की आवश्यकता नहीं है। आप केवल एलडीएपी के साथ उपयोगकर्ता विवरण के अपने कार्यान्वयन का उपयोग कर सकते हैं। यहां यह करने के तरीके के बारे में जानकारी दी गई है - http://static.springsource.org/spring-security/site/docs/3.1.x/reference/ldap.html#ldap-custom-user- विवरण – Gopi

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