मैं उपयोगकर्ता मूल वस्तु में अतिरिक्त डेटा सहेजने की कोशिश कर रहा हूं।वसंत सुरक्षा कस्टम उपयोगकर्ता विवरण सेवा और कस्टम उपयोगकर्ता वर्ग
मैं क्या किया था:
जहाँ मेरे अतिरिक्त डेटा सहेजा जाता है मेरे मौजूदा उपयोगकर्ता वर्ग के लिए "UserDetails" इंटरफ़ेस को लागू (ईमेल पते की तरह आदि)।
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
UserDAO userDAO;
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
User user = userDAO.findOneByUsername(username);
if (user == null)
throw new UsernameNotFoundException("username " + username
+ " not found");
System.out.println("---------------------> FOUND ------------->"
+ user.getEmail());
return user;
}
}
अंतिम चरण मेरी सुरक्षा विन्यास में UserDetailsService जोड़ने के लिए किया गया था:
@Entity
public class User implements UserDetails {
तो मैं एक UserDetailsService कार्यान्वयन बनाया।
@Configuration
@EnableWebMvcSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
UserDetailsService userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.userDetailsService(userDetailsService());
// ...
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.userDetailsService(userDetailsService());
// ...
}
@Override
protected UserDetailsService userDetailsService() {
return userDetailsService;
}
मैं अपने कंसोल में देखता हूं कि "loadUserByName" को दो बार बुलाया जाता है ("पाया" आउटपुट के कारण)।
जब मैं अपने नियंत्रक में प्रिंसिपल वस्तु तक पहुँचने का प्रयास ->
System.out.println(SecurityContextHolder.getContext()
.getAuthentication().getPrincipal());
मैं अपने अतिरिक्त डेटा प्राप्त नहीं है। जब मैं इसे अपने उपयोगकर्ता ऑब्जेक्ट पर डालने का प्रयास करता हूं तो मुझे अपवाद नहीं मिला।
क्या मुझे कुछ भी याद आ रही है ??
अग्रिम धन्यवाद।
इससे कुछ भी नहीं बदला। बीटीडब्ल्यू। आपका अंतिम कोड स्निपेट मुझे देता है: "java.lang.ClassCastException: org.springframework.security.core.userdetails.User को नहीं डाला जा सकता .......... कस्टम यूज़र विवरण" – jvecsei
क्या आप अपना ऐप डीबग कर सकते हैं और कह सकते हैं कौन सी कक्षा 'SecurityContextHolder.getContext() प्राप्त करेगी। प्रमाणीकरण()। getPrincipal() '? –
कक्षा org.springframework.security.core.userdetails।उपयोगकर्ता – jvecsei