You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package com.spring.modules.sys.task;
import com.alibaba.fastjson.JSONArray;import com.spring.common.utils.LdapReadUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;
import javax.naming.Context;import javax.naming.NamingException;import javax.naming.ldap.InitialLdapContext;import javax.naming.ldap.LdapContext;import java.io.IOException;import java.util.Map;import java.util.Properties;
/** * 定时同步域控账号信息到 Redis */@Component@EnableSchedulingpublic class LdapAccountRefreshTask {
private static final Logger logger = LoggerFactory.getLogger(LdapAccountRefreshTask.class);
@Value("${spring.ldap.urls}") private String ldapUrl; @Value("${spring.ldap.base}") private String ldapBase; @Value("${spring.ldap.username}") private String ldapUserDn; @Value("${spring.ldap.password}") private String ldapPassword;
@Autowired private RedisTemplate<String, Object> redisTemplate;
@Scheduled(cron = "${task.data.refreshLdapAccountToRedis}") public void refreshLdapAccountToRedis() throws NamingException { //首先查询域控账号的所有数据
Properties env = new Properties(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, ldapUrl); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, ldapUserDn); env.put(Context.SECURITY_CREDENTIALS, ldapPassword); env.put(Context.REFERRAL, "ignore");
LdapContext ctx = null; //尝试解析数据
try{ // 创建DirContext对象,建立与LDAP服务器的连接
ctx = new InitialLdapContext(env, null); //调用方法读取数据
Map<String, String> ldapAccountMap = LdapReadUtils.getAllLdapAccount(ctx, ldapBase, redisTemplate);
logger.info("域控账号缓存的数量:"+ldapAccountMap.size()); // 数据放到redis中去
// redisTemplate.opsForHash().putAll("ldapAccount", ldapAccountMap);
logger.info("域控账号缓存:"+ JSONArray.toJSONString(ldapAccountMap));
} catch (NamingException | IOException e) { logger.error("Failed to connect to the LDAP server."); } finally{ if (null != ctx){ ctx.close(); } } }
}
|