ldap 字段解释(JavaUnboundID内存LDAP服务支持)
ldap 字段解释(JavaUnboundID内存LDAP服务支持)
2024-11-22 11:16:59  作者:诂莋堅強  网址:https://m.xinb2b.cn/know/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奔腾年代白曼宁看《奔腾年代》越看越觉得这部剧是在用常汉坤、冯仕高、白曼宁等人物的缺点来烘托男女主的性格完美,比较与鉴别因此而生相比之下,我更认为这几位配角来得更立体、更真实昨天写了冯仕高这个人物,今天要聊聊白曼宁白。
  • 美容养颜食物排行榜(4种食物帮你改善皮肤粗糙)
  • 2024-11-224种食物帮你改善皮肤粗糙各种因素的刺激并且损害,从而导致很多人都存在有皮肤粗糙等情况,尤其以手部以及脚部皮肤粗糙情况更加严重那么吃什么可全面改善皮肤粗糙呢?1、豆类食品各种豆类食品在我们生活中是极为常见的,但专家提醒,对于皮。
  • 史上最牛兵王(史上最强超级兵)
  • 2024-11-22史上最强超级兵话说每当和队友一起推了对方的高地水晶,小编就觉得胜利触手可及,这个时候可以准备仰天长啸欢呼一下自己即将到手的胜利然而今天小编就看到了一个很神奇的一幕啦!对面的熊崽子看过来,看过来!我们的超级兵已经来了。
  • 瘦脸针失效后会恢复原来的样子吗(瘦脸针后遗症知多少)
  • 2024-11-22瘦脸针后遗症知多少瘦脸针后遗症知多少,本人经历3年的教训,千万别因小失大你尝试过医美吗,咱们明人不说暗话,相信十有八九的女生都尝试过一枚,我也不例外,前段时间看到有些新闻在讲,据数据统计,所有的医美项目里,打的最多的就。
  • 古典三角形插花教程(万万没想到插花中的)
  • 2024-11-22万万没想到插花中的在美术中,三角形是一个非常重要的美学符号在建筑上,正三角形与方形都具有稳定感,但三角形同时具有方向感,有指向天空神圣的天国意义第一、正三角形在宗教强烈的民族中,三角形建筑就占了主体地位,如古埃及的金字。
  • 关东煮是什么东西(关东煮介绍)
  • 2024-11-22关东煮介绍关东煮是日本人喜爱的小吃,本名御田,是一种源自日本关东地区的料理通常材料包括鸡蛋、萝卜、土豆、海带、蒟蒻、鱼丸、竹轮(鱼肉或豆的制品)等,将这些材料每一种都分别放在互不相通的铁格子锅(箱)里,用海带木。
  • 穿戴是什么意思啊
  • 2024-11-22穿戴是什么意思啊穿戴-释义:①(动词)穿上和佩戴,泛指打扮:她穿戴得很时尚②(名)指穿戴的服饰:瞧这身穿戴,就知来人派头不小出处《儒林外史》第三四回:“忙取一件旧衣服,一顶旧帽子,穿戴起来”清·李渔《奈何天·伙醋》:。
  • 长沙世界之窗免费游玩设施有哪些(又见爆款青绿腰)
  • 2024-11-22又见爆款青绿腰4月8日,长沙世界之窗迎来了本轮疫情闭园后的再次复工开园,景区同时举行了四月汉服季·又见青绿主题文化活动启动仪式,并邀请入园游客共同创作“绿马画”,祈愿绿码常在“十二花神”汉服秀十二位汉服美女用走秀和。
  • 蛋白质粉的作用(蛋白质粉有什么好处)
  • 2024-11-22蛋白质粉有什么好处蛋白粉一般是提纯的大豆蛋白、豌豆蛋白、酪蛋白和乳清蛋白等蛋白,几种蛋白经过加工复合而成的富含蛋白质的粉末,专门为缺乏蛋白质人群提供和补充足够的蛋白质蛋白粉也可以作为营养性的食品补充剂,因为它食用方便,。
  • 红灯亮可以左转掉头吗(红灯能不能掉头)
  • 2024-11-22红灯能不能掉头常在路上走,哪能不掉头?你有一条违法未处理?别提了,昨天开车路过**路口,因为路不熟,我没注意看标志,迷迷糊糊就掉了个头,结果就…在我们日常驾驶中,经常会遇到要掉头行驶的情况那你到底会不会掉头?哪里能。
  • 副驾驶头顶大空间(打造出副驾专属空间)
  • 2024-11-22打造出副驾专属空间27寸4K巨屏,带来颠覆式智能娱乐体验面对当下消费者对于智能化、互联化的深度依赖,目前市面上的主流汽车产品都开始采用双大屏配置然而,双大屏虽然有效的提升了驾驶员查看仪表、使用车机时的体验感但对于坐在副。