XXL-JOB-LDAP

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值