<dependency>
<groupId>org.springframework.ldap</groupId>
<artifactId>spring-ldap-core</artifactId>
</dependency>
package com.xxl.job.admin.core.conf;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.ldap.core.support.LdapContextSource;
import java.util.HashMap;
import java.util.Map;
/**
* LDAP
*/
@Configuration
public class LdapConfiguration {
@Value("${ldap.url}")
private String ldapUrl;
@Value("${ldap.admin}")
private String ldapAdmin;
@Value("${ldap.passwd}")
private String ldapPasswd;
@Bean
public LdapContextSource contextSource() {
LdapContextSource contextSource = new LdapContextSource();
Map<String, Object> config = new HashMap();
contextSource.setUrl(ldapUrl);
contextSource.setUserDn(ldapAdmin);
contextSource.setPassword(ldapPasswd);
config.put("java.naming.ldap.attributes.binary", "objectGUID");
contextSource.setPooled(true);
contextSource.setBaseEnvironmentProperties(config);
return contextSource;
}
@Bean
public LdapTemplate ldapTemplate() {
if (null == ldapTemplate)
ldapTemplate = new LdapTemplate(contextSource());
return ldapTemplate;
}
private LdapTemplate ldapTemplate;
}
@Autowired
private LdapTemplate ldapTemplate;
public boolean checkLdapUserPasswd(String username, String password) {
AndFilter filter = new AndFilter();
filter.and(new EqualsFilter("objectclass", "person"))
.and(new EqualsFilter("uid", username));
boolean authSuccess = ldapTemplate.authenticate("", filter.toString(), password);
return authSuccess;
}
public boolean checkLdapUser(String username) {
String filter = "(&(objectclass=person)(uid=" + username + "))";
List list = ldapTemplate.search("", filter, new AttributesMapper() {
@Override
public Object mapFromAttributes(Attributes attributes) throws NamingException {
return attributes.get("uid");
}
});
return !CollectionUtils.isEmpty(list);
}
XxlJobUser xxlJobUser = xxlJobUserDao.loadByUserName(username);
boolean ldapCheckRes = checkLdapUser(username);
//if ldap
if (ldapCheckRes) {
if (!checkLdapUserPasswd(username, password)) {
return new ReturnT<String>(500, I18nUtil.getString("login_param_unvalid"));
}
if (xxlJobUser == null) {
xxlJobUser=new XxlJobUser();
xxlJobUser.setPassword("\uD83D\uDE00");//can`t for login
xxlJobUser.setUsername(username);
xxlJobUserDao.save(xxlJobUser);
}
}else{
// valid passowrd
if (xxlJobUser == null) {
return new ReturnT<String>(500, I18nUtil.getString("login_param_unvalid"));
}
String passwordMd5 = DigestUtils.md5DigestAsHex(password.getBytes());
if (!passwordMd5.equals(xxlJobUser.getPassword())) {
return new ReturnT<String>(500, I18nUtil.getString("login_param_unvalid"));
}
}