का उपयोग कर स्प्रिंग सिक्योरिटी के साथ उपयोगकर्ता को प्रोग्रामेटिक रूप से प्रमाणीकृत कैसे कर सकता हूं, मैं सोच रहा था कि मैं उपयोगकर्ता को प्रमाणीकृत करने के लिए यहां क्या कर रहा हूं। मेरे पास एक ऐसा एप्लिकेशन है जहां उपयोगकर्ता अपने खाते को सक्रिय करने के लिए कई कदम उठाता है, और ऐसा करने पर मैं लॉगिन फॉर्म को बाईपास करना चाहता हूं और उन्हें सीधे अपने डैशबोर्ड पर ले जाना चाहता हूं।मैं DaoAuthenticationProvider
protected void automatedLogin(String username, String password, HttpServletRequest request) {
try {
// Must be called from request filtered by Spring Security, otherwise SecurityContextHolder is not updated
CustomUserDetailsService udService = new CustomUserDetailsService(userDAO, request);
UserDetails uDetails = udService.loadUserByUsername(username);
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(uDetails, password);
token.setDetails(new WebAuthenticationDetails(request));
DaoAuthenticationProvider authenticator = new DaoAuthenticationProvider();
Authentication authentication = authenticator.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(authentication);
} catch (Exception e) {
e.printStackTrace();
SecurityContextHolder.getContext().setAuthentication(null);
}
}
मैं अपने प्रमाणीकरण प्रदाता के रूप में DaoAuthenticationProvider वर्ग का उपयोग करना चाहिए:
यहाँ की तरह अपने स्वचालित लॉगिन समारोह दिखाई देता है। मैं सत्यापित किया है कि मैं सही साख, आईडी, अधिकार भूमिकाओं, आदि से युक्त एक UserDetails मॉडल हो रही है
जब यह प्रमाणित विधि एक अशक्त सूचक में मैं चलाने के कॉल कहीं DaoAuthenticationProvider कक्षा में रास्ते:
org.springframework.security.authentication.AuthenticationServiceException org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser (DaoAuthenticationProvider.java:109) org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider पर पर । प्रमाणित (AbstractUserDetail sAuthenticationProvider.java:132) com.bosch.actions.BaseController.doAutoLogin (BaseController.java:659) पर। । । org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser (DaoAuthenticationProvider.java:101)
पर java.lang.NullPointerException मैं, वास्तव में यकीन नहीं क्या रिक्त है कर रहा हूँ के रूप में मैं डॉन ': की वजह से स्रोत कोड उपलब्ध नहीं है।
संपादित मैं यहाँ स्रोत कोड को खोजने के लिए कर रहा था - https://github.com/SpringSource/spring-security/blob/master/core/src/main/java/org/springframework/security/authentication/dao/DaoAuthenticationProvider.java
मैं स्पष्ट रूप से वस्तु पर UserDetailsService की स्थापना करके चारों ओर अशक्त सूचक प्राप्त करने में सक्षम था:
authenticator.setUserDetailsService(udService);
लेकिन अब मुझे बुरा क्रेडेंशियल अपवाद मिलता है जब मुझे पता है कि प्रदान किया गया पासवर्ड सही है, क्योंकि मैंने इसे कोड में पहले उपयोगकर्ता डिस्प्ले ऑब्जेक्ट में डिबगर में देखा है।
org.springframework.security.authentication.BadCredentialsException: org.springframework.security.authentication.dao.DaoAuthenticationProvider.additionalAuthenticationChecks (DaoAuthenticationProvider.java:87) org.springframework.security पर पर बुरा साख। authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate (AbstractUserDetailsAuthenticationProvider.java:149)
स्प्रिंग सुरक्षा खुला स्रोत है, तो आप स्रोत कोड उपलब्ध है। आपको शायद समस्याएं आ रही हैं क्योंकि दाओए प्रमाणीकरणप्रोवाइडर को वसंत प्रबंधित बीन होने के लिए डिज़ाइन किया गया है। – samlewis