ldap认证 java_LDAP认证

1.LDAP介绍

LDAP,(Light Directory Access Protocol),基于X.500标准的轻量级目录访问协议,类似于目录服务一样,是一个为查询浏览和搜索的数据库,优势在于他的数据存储结构,即树状结构组织数据,他的读性能高,写性能差,不支持事务功能。

LDAP目录服务是由目录数据库和一套访问协议组成的协议(ssl  (port:389) / ssh  (port:636)),不同的协议端口不一致。

2.LDAP登录实现原理

每一个登录,连接请求去发送本地的用户、密码给LDAP服务器,然后在LDAP服务器上进行匹配,然后判断是否可以通过认证。

3. LDAP配置代码

private LdapContext getLdapContext() {

EnterpriseLDAPConfig config = new EnterpriseLDAPConfig()

.baseDN("dc=fanuc,dc=com")

.ip("106.38.46.129").port("389")

.username("cn=Manager,dc=fanuc,dc=com")

.password(IdsBase64Utils.encrypt("secret"));

LDAPConnector ldapConnector = new LDAPConnector(config);

assertNotNull(ldapConnector);

return ldapConnector.connect();

}

/**

* 根据 配置 初始化LDAP的连接

*

*/

public class LDAPConnector extends AbstractLdapHandler {

private static final Logger LOG = LoggerFactory.getLogger(LDAPConnector.class);

private EnterpriseLDAPConfig ldapConfig;

public LDAPConnector(EnterpriseLDAPConfig ldapConfig) {

this.ldapConfig = ldapConfig;

}

public LdapContext connect() {

return connect(ldapConfig.baseDN());

}

public LdapContext connect(String baseDN) {

baseDN = formatDN(baseDN);

String url = createUrl(ldapConfig.ip(), ldapConfig.port(), baseDN);

Hashtable env = initialEnv(url, ldapConfig.username(), IdsBase64Utils.decrypt(ldapConfig.password()));

try {

if (ldapConfig.connType().equals(LDAPConnType.SSL)){

env.put(Context.SECURITY_PROTOCOL, "ssl");

}

return new InitialLdapContext(env, null);

} catch (NamingException e) {

LOG.warn("Initial LDAPContext failed, url: " + url, e);

return null;

}

}

public abstract class AbstractLdapHandler {

public static final String LDAP_START = "ldap://";

/**

* ldap://12.2.3.44:389/dc=idsmanager,DC=com

*/

String createUrl(String ip, String port, String baseDN) {

return LDAP_START + ip + ":" + port + "/" + baseDN;

}

/**

* 初始化配置参数

*/

Hashtable initialEnv(String url, String userDN, String pwd) {

Hashtable env = new Hashtable<>();

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");

env.put(Context.PROVIDER_URL, url);

env.put(Context.SECURITY_AUTHENTICATION, "simple");

env.put(Context.SECURITY_PRINCIPAL, userDN);

env.put(Context.SECURITY_CREDENTIALS, pwd);

//支持 解析 AD中的 objectGUID

env.put("java.naming.ldap.attributes.binary", "objectGUID");

return env;

}

//其中env中的所需如下

String INITIAL_CONTEXT_FACTORY = "java.naming.factory.initial";

String PROVIDER_URL = "java.naming.provider.url";

String SECURITY_AUTHENTICATION = "java.naming.security.authentication";

String SECURITY_PRINCIPAL = "java.naming.security.principal";

String SECURITY_CREDENTIALS = "java.naming.security.credentials";

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值