ldap 字段解释(JavaUnboundID内存LDAP服务支持)
ldap 字段解释(JavaUnboundID内存LDAP服务支持)
2024-11-22 12:24:13  作者:诂莋堅強  网址:https://m.xinb2b.cn/sport/bmi424147.html

轻量目录访问协议,一般都简称为LDAP它是基于X.500标准的,可根据需要定制与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到,今天小编就来说说关于ldap 字段解释?下面更多详细答案一起来看看吧!


ldap 字段解释

LDAP(Lightweight Directory Access Protocol):

轻量目录访问协议,一般都简称为LDAP。它是基于X.500标准的,可根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。

LDAP的主要应用场景:

1、网络服务:DNS服务;2、统一认证服务;3、Linux PAM (ssh, login, cvs. . . );4、Apache访问控制5、各种服务登录(ftpd, php based, perl based, python based. . . );6、个人信息类,如地址簿;7、服务器信息,如帐号管理、邮件服务等;

UnboundID LDAP SDK:

提供了一套快速、强大、用户友好并且开源的Java API来与LDAP目录服务器交互,与其它基于Java的LDAP APIs相比,它具有更好的性能、更易于使用,功能更多,而且还是唯一个不断有活跃开发和增强的SDK。官网地址:https://www.ldap.com/unboundid-ldap-sdk-for-java

代码案例:

pom.xml

<!--使用unboundid嵌入式LDAP--><dependency> <groupId>com.unboundid</groupId> <artifactId>unboundid-ldapsdk</artifactId> <version>3.2.0</version></dependency>

package com.what21.ldap.server;import com.unboundid.ldap.listener.InMemoryDirectoryServerConfig;import com.unboundid.ldap.sdk.LDAPException;import org.springframework.util.StringUtils;public class LdapServerConfig { private InMemoryDirectoryServerConfig serverConfig; private String userBaseDN; private String userDN; public LdapServerConfig(String baseDn,String userBaseDN,String userId){ if(!StringUtils.isEmpty(userBaseDN) && userBaseDN.endsWith(",")){ userDN = "uid=" userId userBaseDN; }else{ userDN = "uid=" userId "," userBaseDN; } String[] ldapDnArray = { baseDn, userBaseDN, userDN }; try { serverConfig = new InMemoryDirectoryServerConfig(ldapDnArray); } catch (LDAPException e) { e.printStackTrace(); } } public InMemoryDirectoryServerConfig getLdapServerConfig(){ return serverConfig; } public String getUserBaseDN() { return userBaseDN; } public String getUserDN() { return userDN; } public void setUserDN(String userDN) { this.userDN = userDN; }}

package com.what21.ldap.server;import com.unboundid.ldap.listener.InMemoryListenerConfig;import com.unboundid.ldap.sdk.LDAPException;public class LdapListenerConfig{ private InMemoryListenerConfig config; public LdapListenerConfig(int port){ this("default",port); } public LdapListenerConfig(String name,int port){ try { this.config = new InMemoryListenerConfig(name,null,port,null,null,null); } catch (LDAPException e) { e.printStackTrace(); } } public InMemoryListenerConfig getInMemoryListenerConfig(){ return config; }}

package com.what21.ldap.server;import lombok.extern.slf4j.Slf4j;import com.unboundid.ldap.listener.interceptor.InMemoryInterceptedSimpleBindRequest;import com.unboundid.ldap.listener.interceptor.InMemoryOperationInterceptor;import com.unboundid.ldap.sdk.LDAPException;import com.unboundid.ldap.sdk.ResultCode;import com.unboundid.ldap.sdk.SimpleBindRequest;@Slf4jpublic class LdapOptInterceptor extends InMemoryOperationInterceptor { String userBaseDN; String userDN; String userId; String passwd; public LdapOptInterceptor(String userBaseDN, String userDN, String userId, String passwd) { this.userBaseDN = userBaseDN; this.userDN = userDN; this.userId = userId; this.passwd = passwd; } @Override public void processSimpleBindRequest(InMemoryInterceptedSimpleBindRequest request) throws LDAPException { String bindDN = request.getRequest().getBindDN(); String passwd = request.getRequest().getPassword().stringValue(); log.debug("request bindDN ->" bindDN); log.debug("request passwd ->" passwd); if (bindDN.contains(userBaseDN)) { bindDN = bindDN.replace("," userBaseDN, ""); } if (bindDN.contains("=")) { try { bindDN = bindDN.substring(bindDN.indexOf("="), bindDN.length()); } catch (Exception e) { } } log.debug("do treatment bindDN ->" bindDN); String result = "-1"; // 假设认证成功 result = "1000"; // 认证逻辑 if ("1000".equals(result)) { request.setRequest(new SimpleBindRequest(this.userDN, this.passwd)); } else if ("1001".equals(result)) { throw new LDAPException(ResultCode.AUTH_UNKNOWN, "Unable to bind user,because the provided password was incorrect."); } else if ("1002".equals(result)) { throw new LDAPException(ResultCode.AUTH_UNKNOWN, "Unable to bind user,because user is not authorized."); } else { throw new LDAPException(ResultCode.AUTH_UNKNOWN, "Unable to bind user,because unknown error."); } super.processSimpleBindRequest(request); }}

package com.what21.ldap.server;import com.unboundid.ldap.listener.InMemoryDirectoryServer;import com.unboundid.ldap.listener.InMemoryDirectoryServerConfig;import com.unboundid.ldap.sdk.Attribute;import com.unboundid.ldap.sdk.LDAPException;public class LdapMemoryServer { private int port; private String baseDN; private String userBaseDN; private final String userId = "default"; private final String passwd = "default"; private InMemoryDirectoryServer dirServer; public LdapMemoryServer(int port, String baseDN, String userBaseDN) { this.port = port; this.baseDN = baseDN; this.userBaseDN = userBaseDN; } public void startServer() { // LDAPServer配置 LdapServerConfig serverConfig = new LdapServerConfig(baseDN, userBaseDN, userId); // 监听配置 LdapListenerConfig listenerConfig = new LdapListenerConfig(port); String userDN = serverConfig.getUserDN(); // 监听 LdapOptInterceptor interceptor = new LdapOptInterceptor(userBaseDN, userDN, userId, passwd); // LDAP try { InMemoryDirectoryServerConfig config = serverConfig.getLdapServerConfig(); config.addInMemoryOperationInterceptor(interceptor); config.setListenerConfigs(listenerConfig.getInMemoryListenerConfig()); config.setSchema(null); dirServer = new InMemoryDirectoryServer(config); // 添加属性 dirServer.add(userDN, getUidAttr(), getPasswdAttr()); dirServer.startListening(); } catch (LDAPException e) { e.printStackTrace(); } } private Attribute getUidAttr() { return new Attribute("uid", passwd); } private Attribute getPasswdAttr() { return new Attribute("userPassword", userId); } public void stopServer() { if (dirServer != null) { dirServer.shutDown(true); } } public static void main(String[] args) { int port = 1389; String baseDN = "dc=what21,dc=com"; String userBaseDN = "ou=users" "," baseDN; LdapMemoryServer server = new LdapMemoryServer(port, baseDN, userBaseDN); server.startServer(); try { Thread.sleep(10000000L); } catch (InterruptedException e) { e.printStackTrace(); } }}

客户端认证实现:

package com.what21.ldap.client;import java.util.Properties;import javax.naming.NamingException;import javax.naming.ldap.InitialLdapContext;public class LdapClientAuthen { public static InitialLdapContext auth(String url, String domain, String name, String passwd) { Properties mEnv = new Properties(); mEnv.put(InitialLdapContext.AUTHORITATIVE, "true"); mEnv.put(InitialLdapContext.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); mEnv.put(InitialLdapContext.PROVIDER_URL, url); mEnv.put(InitialLdapContext.SECURITY_AUTHENTICATION, "simple"); mEnv.put(InitialLdapContext.SECURITY_PRINCIPAL, name); mEnv.put(InitialLdapContext.SECURITY_CREDENTIALS, passwd); try { return new InitialLdapContext(mEnv, null); } catch (NamingException e) { e.printStackTrace(); } return null; } public static void main(String[] args) { String url = "ldap://127.0.0.1:1389"; String domain = "what21.com"; String username = "uid=account,ou=users,dc=what21,dc=com"; String passwd = "password"; InitialLdapContext content = auth(url, domain, username, passwd); if(content!=null){ System.out.println("认证成功:" content); }else{ System.out.println("认证失败:" content); } try { content.close(); } catch (Exception e) { e.printStackTrace(); } }}

  • 郑爽演过小时代吗(郑爽赵丽颖刘诗诗唐嫣这些当红女星的小时候)
  • 2024-11-22郑爽赵丽颖刘诗诗唐嫣这些当红女星的小时候娱乐圈从来都不缺有颜值的童星,这位小童星将郑爽、赵丽颖、刘诗诗、唐嫣这些当红花旦的小时候都演全了童星张籽沐在由冯绍峰、林依晨、陈晓东等联袂出演的古装剧《兰陵王》中饰演北周公主宇文贞她在由陈晓、陈妍希主。
  • iphone手机专用功能(边用iPhone7边洗澡走红)
  • 2024-11-22边用iPhone7边洗澡走红从以往的测试来看,iPhone7毫无疑问是史上防水最好的iPhone苹果在官网上如此介绍:iPhone7和iPhone7Plus可防溅、抗水、防尘,在受控实验室条件下经测试,其效果在IEC60529标。
  • 极兔收购百世国内快递业务快吗(快递业迎来变局)
  • 2024-11-22快递业迎来变局封面新闻记者付文超快递行业,很久没这么热闹过10月29日,极兔速递和百世集团共同宣布达成战略合作意向,极兔速递将以约68亿人民币的价格收购百世集团中国快递业务传言变成现实,靴子终于落地从2020年3月。
  • 孙小果出来了吗
  • 2024-11-22孙小果出来了吗已经出来了因为孙小果在2021年3月22日被批准假释并获得自由孙小果出狱引起了社会广泛关注,也引起了人们对于法律公正性的质疑同时也提醒我们需要重视青少年犯罪的预防和教育工作,防范犯罪的发生。
  • 胎儿心脏要一直到什么时候发育好(怀孕初期胎儿脑部)
  • 2024-11-22怀孕初期胎儿脑部刚怀孕时,心里总是充满忐忑不安,想着:“宝宝是否安好待在我的肚子里呢?”妇产科医生解说胎儿在怀孕0至12周的成长情形,让你一窥宝宝在肚子里的小小样貌第一孕期胎儿最重要营养素-叶酸叶酸可预防胎儿发育中出。
  • 京东自营买手机是真货吗(网购手机质量抽查结果公布)
  • 2024-11-22网购手机质量抽查结果公布网络视听生态圈cnaif-sh←【长按复制】添加好友或点击上方,轻松关注推荐理由:从政策监管到内容生产,从技术创新到企业运营,从市场营销到资本运作,带您全面了解中国网络视听行业的生态变化近日,央视消费。
  • 我和妈妈之间的约定(我和妈妈一起去报到)
  • 2024-11-22我和妈妈一起去报到石榴云/新疆日报讯(记者沈祖孝报道)“今天,我和妈妈一起去报到,已经到达机场,很顺利!”8月23日15时,坐在乌鲁木齐地窝堡国际机场候机大厅的任子纯迫不及待地在自己微信朋友圈记录自己激动的心情8月23。
  • 徐锦江回应撞脸海王(海王徐锦江这个)
  • 2024-11-22海王徐锦江这个12月7日,万众期盼的《海王》上映了,从目前上映6天来看,票房达到了7.61亿,而且,口碑也是不错DC在2018年的年底打出了一个漂亮的翻身仗海王票房与此同时,一位此前沉寂多年安心于画画创作的徐锦江老。
  • 疯狂原始人2手游平民宠物阵容(疯狂原始人2手游)
  • 2024-11-22疯狂原始人2手游疯狂原始人2免费版是一款趣味十足的策略手游,由同名美国动画电影正版授权制作,完美还原了史前一万年前的时代背景,经典角色重新塑造,有着非常搞笑的冒险玩法在游戏中玩家将化身手执石矛穿兽皮的原始人,在原动漫。
  • 书剑恩仇录关外六魔武功如何(书剑恩仇录中所有武功的克星)
  • 2024-11-22书剑恩仇录中所有武功的克星《书剑恩仇录》中所有武功的克星:太极拳克制芙蓉金针,克制武当长拳,克制大力鹰爪功,克制沾衣十八跌,克制岳家散手,克制分筋错骨手,克制查拳,克制僵尸拳,克制大洪拳九阳神功、纯阳无极功、少林九阳功、武当九。