Spring security userDetailsService和authenticationProvider
我想根据ActiveDirectory对我的用户进行身份验证,然后用数据库中的其他数据扩展用户数据 如果我设置AuthenticationManagerBuilder.userDetailsService()或AuthenticationManagerBuilder.authenticationProvider(),但不能同时设置两者,则我的代码可以工作 谢谢Spring security userDetailsService和authenticationProvider,spring-security,spring-security-ldap,Spring Security,Spring Security Ldap,我想根据ActiveDirectory对我的用户进行身份验证,然后用数据库中的其他数据扩展用户数据 如果我设置AuthenticationManagerBuilder.userDetailsService()或AuthenticationManagerBuilder.authenticationProvider(),但不能同时设置两者,则我的代码可以工作 谢谢 @Configuration protected static class AuthenticationSecurity extend
@Configuration
protected static class AuthenticationSecurity extends GlobalAuthenticationConfigurerAdapter {
@Autowired
private UserDetailsServiceImpl userDetailsServiceImpl;
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(this.userDetailsServiceImpl);
String adUrl = "ldap:///";
ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider("", adUrl);
provider.setConvertSubErrorCodesToExceptions(true);
provider.setUseAuthenticationRequestCredentials(true);
auth.authenticationProvider(provider);
System.out.println("setting userDetailsServiceImpl");
}
}
UserDetailsServiceImpl类
@Service
@Transactional
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String arg0) throws UsernameNotFoundException {
System.out.println(arg0);
User user = this.userRepository.findOneByUsername(arg0);
System.out.println("i've found this user : " + user.getNames());
if (user == null) {
throw new UsernameNotFoundException(arg0);
}
return new org.springframework.security.core.userdetails.User(arg0, "",getAllPrivileges(user));
}
private List<GrantedAuthority> getAllPrivileges(User user) {
List<GrantedAuthority> authorities = new ArrayList<>();
Hibernate.initialize(user.getUserPrivileges());
System.out.println(user.getUserPrivileges().size() + " privileges have been found for " + user.getNames());
for (UserPrivilege privilege : user.getUserPrivileges()) {
authorities.add(new SimpleGrantedAuthority(privilege.getPrivilege().getCodename()));
}
authorities.stream().forEach(a -> System.out.println(a.toString()));
return authorities;
}
}
@服务
@交易的
公共类UserDetailsServiceImpl实现UserDetailsService{
@自动连线
私有用户存储库用户存储库;
@凌驾
public UserDetails loadUserByUsername(字符串arg0)引发UsernameNotFoundException{
系统输出打印项次(arg0);
User User=this.userRepository.findOneByUsername(arg0);
System.out.println(“我找到了这个用户:”+user.getNames());
if(user==null){
抛出新用户名NotFoundException(arg0);
}
返回新的org.springframework.security.core.userdetails.User(arg0,“,getAllPrivileges(User));
}
私有列表getAllPrivileges(用户){
列表权限=新建ArrayList();
初始化(user.getUserPrivileges());
System.out.println(已为“+user.getNames()”)找到user.getUserPrivileges().size()+”权限;
for(UserPrivilege:user.getUserPrivileges()){
添加(新的SimpleGrantedAuthority(privilege.getPrivilege().getCodename());
}
authorities.stream().forEach(a->System.out.println(a.toString());
返回当局;
}
}