/ / वसंत: वसंत सुरक्षा उपयोगकर्ता के लिए कस्टम उपयोगकर्ता विवरण जोड़ें - जावा, वसंत, वसंत-पीवीसी, वसंत-सुरक्षा

वसंत: वसंत सुरक्षा उपयोगकर्ता के लिए कस्टम उपयोगकर्ता विवरण जोड़ें - जावा, वसंत, वसंत-पीवीसी, वसंत-सुरक्षा

मैं वर्तमान में स्प्रिंग एमवीसी एप्लिकेशन पर काम कर रहा हूंऔर जब मैं लॉग इन करता हूं (मुझे उपयोगकर्ता नाम, पासवर्ड, कस्टम मूल्य सम्मिलित करता है) तो मुझे अपने स्प्रिंग सुरक्षा लॉग-इन में एक कस्टम फ़ील्ड जोड़ने की आवश्यकता है। उपयोगकर्ता द्वारा लॉग किए जाने पर (जैसे pricipal.getValue के माध्यम से) यह मान हर जगह उपलब्ध होना चाहिए।

मैं कस्टम उपयोगकर्ता वर्गों और कस्टम सेवाओं के बारे में बहुत कुछ पढ़ता हूं, लेकिन "मेरी समस्या के लिए वास्तव में काम कर समाधान नहीं ढूंढ सकता ...

कोई भी मदद बहुत अच्छी रहेगी!

उत्तर:

उत्तर № 1 के लिए 13

जैसे अविनाश ने कहा, आप अपना बना सकते हैं User कक्षा कार्यान्वयन UserDetails और आप भी लागू कर सकते हैं UserDetailsService और कस्टम वापस करने के लिए इसी तरीकों को ओवरराइड करें User वस्तु:

@Service("userDetailsService")
public class MyUserDetailsService implements UserDetailsService {

//get user from the database, via Hibernate
@Autowired
private UserDao userDao;

@Transactional(readOnly=true)
@Override
public UserDetails loadUserByUsername(final String username)
throws UsernameNotFoundException {
//CUSTOM USER HERE vvv
User user = userDao.findByUserName(username);
List<GrantedAuthority> authorities =
buildUserAuthority(user.getUserRole());
//if you"re implementing UserDetails you wouldn"t need to call this method and instead return the User as it is
//return buildUserForAuthentication(user, authorities);
return user;

}

// Converts user to spring.springframework.security.core.userdetails.User
private User buildUserForAuthentication(user,
List<GrantedAuthority> authorities) {
return new User(user.getUsername(), user.getPassword(),
user.isEnabled(), true, true, true, authorities);
}

private List<GrantedAuthority> buildUserAuthority(Set<UserRole> userRoles) {

Set<GrantedAuthority> setAuths = new HashSet<GrantedAuthority>();

// add user"s authorities
for (UserRole userRole : userRoles) {
setAuths.add(new SimpleGrantedAuthority(userRole.getRole()));
}

List<GrantedAuthority> Result = new ArrayList<GrantedAuthority>(setAuths);

return Result;
}

}

और आप सिर्फ अपने कॉन्फ़िगर करें WebConfigurerAdapter रिवाज का उपयोग करना UserdetailsService :

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
@Qualifier("userDetailsService")
UserDetailsService userDetailsService;

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}

@Override
protected void configure(HttpSecurity http) throws Exception {

//authorization logic here ...
}

@Bean
public PasswordEncoder passwordEncoder(){
// return preferred PasswordEncoder ...//
}


}

यहाँ, एक कस्टम का एक नमूना UserDetails कार्यान्वयन: कस्टम उपयोक्ता


जवाब के लिए 6 № 2

अपनी कक्षा का कार्यान्वयन बनाएं UserDetails इंटरफेस।

public class User implements UserDetails {
// Your user properties
// implement methods
}

और फिर, एक बार प्रमाणित होने के बाद, आप इस परियोजना में कहीं भी इस तरह से इस वस्तु तक पहुँच सकते हैं।

User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();