मैंने वसंत सुरक्षा का उपयोग कर परिवर्तन पासवर्ड कार्यक्षमता लागू की है लेकिन ((UserDetails) प्रिंसिपल) .getPassword()) उपयोगकर्ता में लॉग इन के लिए शून्य लौट रहा है।उपयोगकर्ता विवरण प्राप्त करें वसंत सुरक्षा 3.1 में खोपड़ी वापस आती है। वर्तमान में लॉग इन उपयोगकर्ता का पासवर्ड कैसे प्राप्त करें?
अगर मुझे सही याद है, तो यह 3.0 में पहले काम करता था। क्या यह 3.1 में बदला गया था ताकि लॉग इन उपयोगकर्ता का वर्तमान पासवर्ड पुनर्प्राप्त नहीं किया जा सके?
नीचे दिए गए कोड में मैं वेब पेज से उपयोगकर्ता पासवर्ड में टाइप किए गए वर्तमान पासवर्ड की जांच कर रहा हूं। मैं तब जांच कर रहा हूं कि लॉग इन उपयोगकर्ता का पासवर्ड टाइप किए गए पासवर्ड से मेल खाता है या नहीं। अगर ऐसा होता है तो मैं oldPasswordMatchNewPassword = true सेट करना चाहता हूं।
मैं इस कार्यक्षमता को कैसे कार्यान्वित करूं?
@RequestMapping(value = "/account/changePassword.do", method = RequestMethod.POST)
public String submitChangePasswordPage(
@RequestParam("oldpassword") String oldPassword,
@RequestParam("password") String newPassword) {
Object principal = SecurityContextHolder.getContext()
.getAuthentication().getPrincipal();
String username = principal.toString();
if (principal instanceof UserDetails) {
username = ((UserDetails) principal).getUsername();
System.out.println("username: " + username);
System.out.println("password: "
+ ((UserDetails) principal).getPassword());
if (((UserDetails) principal).getPassword() != null) {
if (((UserDetails) principal).getPassword().equals(oldPassword)) {
oldPasswordMatchNewPassword = true;
}
}
}
if (oldPasswordMatchNewPassword == true) {
logger.info("Old password matches new password. Password will be updated.");
changePasswordDao.changePassword(username, newPassword);
SecurityContextHolder.clearContext();
return "redirect:home.do";
} else {
logger.info("Old password did not match new password. Password will be not be updated.");
return null;
}
}
मैंने कुछ sysout() एस डाल दिया ताकि मैं लौटाए गए मान देख सकूं। ((उपयोगकर्ता विवरण) प्रिंसिपल के लिए) .getUsername() मैं सही लॉग इन उपयोगकर्ता देख सकता हूं। ((उपयोगकर्ता विवरण) प्रिंसिपल) .getPassword() यह शून्य लौट रहा है।
मैं ((UserDetails) प्रिंसिपल कैसे प्राप्त करूं) .getPassword() यह मान?
अग्रिम धन्यवाद!
यह समझ में आता है। तो ऐसा करने के लिए सबसे अच्छा अभ्यास क्या है? मैं eraseCredentialsAfter प्रमाणीकरण को बंद करना नहीं चाहता क्योंकि यह सुरक्षा जोखिम उत्पन्न कर सकता है। क्या आप इसे समझने में मेरी मदद कर सकते हैं? – texasdude11