2011-10-25 14 views
25

यह एक आम मुद्दा होना चाहिए ... और मुझे लगता है कि गुगलिंग के बाद, और सोइंग मैंने पर्याप्त उत्तर के लिए पूरी तरह से चारों ओर नहीं देखा होगा या नो 1 ने यह पूछा है ... तो कृपया मुझे माफ़ कर दो।हाइबरनेट में अपडेट करने के बाद स्प्रिंग सिक्योरिटी प्रिंसिपल को फिर से लोड कैसे करें?

मैं हाइबरनेट आदि

तो एक उपयोगकर्ता/प्रिंसिपल में लॉग इन किया है के साथ वसंत सुरक्षा का उपयोग कर रहा है और उनके प्रोफाइल में कुछ परिवर्तन किए।

मैं प्रोफ़ाइल (उपयोगकर्ता विवरण) को अपडेट करने के लिए अपने डीएओ का उपयोग करता हूं, और मैं चाहता हूं कि मेरा प्रिंसिपल स्वचालित रूप से इस अद्यतन को प्रतिबिंबित करे।

हालांकि जब मैं प्रिंसिपल को फिर से प्राप्त करता हूं, तो मुझे गंदे संस्करण (मेरे प्रारंभिक लॉगिन से) मिलता है।

क्या किसी को पता है कि मैं अद्यतन उपयोगकर्ता विवरण को हाइबरनेट से पुनः लोड करने के लिए स्प्रिंग सुरक्षा कैसे प्राप्त कर सकता हूं?

+0

ठीक है मुझे कुछ ऐसा मिला जो मेरी मदद करता है http://stackoverflow.com/questions/2398224/spring-security-autowire-providermanager प्रदाता प्रबंधक प्राप्त करने से मुझे पुनः प्रमाणीकरण करने की अनुमति मिली। अब समस्या यह प्रतीत होती है कि नए प्रिंसिपल में सभी परिधीय संदर्भ आलसी हैं, जिससे यह – alwinc

+0

लाइन के ऊपर अपवाद फेंकने का कारण बनता है, यह वास्तव में एक हाइबरनेट/ओआरएम रणनीति समस्या है, और वसंत सुरक्षा समस्या इतनी अधिक नहीं है, हालांकि ... सही? –

+1

हाँ मैंने इसे थोड़ा और देखा और ऐसा लगता है कि स्प्रिंग सेक सुरक्षा प्रयोजनों के लिए उपयोगकर्ता विवरण को निर्विवाद बनाता है। इस प्रकार, सबसे अच्छा अभ्यास उपयोगकर्ता के विवरण को दोबारा लॉगिन करना है ताकि वे अपने पासवर्ड को पुन: दर्ज कर सकें। – alwinc

उत्तर

41

ठीक है आसपास खोद दिया और अंत में जवाब मिला।

हम उपयोगकर्ता नाम पासवर्ड बना सकते हैं प्रमाणीकरण टोकन और संदर्भ में अद्यतन प्रिंसिपल असाइन करें।

Authentication authentication = new UsernamePasswordAuthenticationToken(userObject, userObject.getPassword(), userObject.getAuthorities()); 
SecurityContextHolder.getContext().setAuthentication(authentication); 

"How to manually set an authenticated user in Spring Security/SpringMVC" भी देखें।

+6

आपका समाधान काम करता है। हालांकि, मैं 'उपयोगकर्ता नाम पासवर्ड उपयोगकर्ता प्रमाणीकरण टोकन' के बजाय 'पूर्व प्रमाणीकृत प्रमाणीकरण टोकन' का उपयोग करूंगा। यह मूल रूप से वही काम करता है - यह केवल आपके इरादे को स्पष्ट करने में मदद करता है और आपके कोड की पठनीयता को बढ़ाता है –

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