<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"));
            }
        }

 

GitHub 加速计划 / xx / xxl-job
27.15 K
10.79 K
下载
xxl-job: 是一个分布式任务调度平台,核心设计目标是开发迅速、学习简单、轻量级、易扩展。
最近提交(Master分支:1 个月前 )
e5d26ba2 - 2 个月前
977ad87b - 2 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐