Java 在基于文件系统的 JNDI 和 JNDI+LDAP 协议应用实例

简介:

以前经常在诸如 weblogic, jboss, tomcat 服务器上配置 JNDI 服务,代码也很简单。但还没有用过 LDAP 服务器. LDAP 用层次(树) 结构存储数据。 要引用树中的项目,就需要列出树中的节点名称。从所要项目开始,一直向树顶跟踪。树中每个节点都有 nodetype=value 形式的唯一 COM 域。 域组件的节点类型为 DC ,叶子节点类型为 O, LDAP 有属性的概念,同时也有类的概念。因此,可以依据属性或类检索。

Java 很是方便只要通过 JNDI 透过 LDAP 就可操作 LDAP, NIS, NDS, NT 等目录服务器.

例子1.
通过属性检索

import javax.naming.NamingEnumeration;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchResult;

/**
* @author Jack.Wang
* 
*/
public class NameSearch {
public static void main(String args[]) {
try {
InitialDirContext ctx = new InitialDirContext();
BasicAttributes searchAttrs = new BasicAttributes();
searchAttrs.put("sn", "Tippin");
NamingEnumeration objs = ctx.search(
"ldap://ldap.jack.com/o=test search, dc=test,dc=com",
searchAttrs);
while (objs.hasMoreElements()) {
SearchResult match = (SearchResult) objs.nextElement();
System.out.println(match.getName());
Attributes attrs = match.getAttributes();
NamingEnumeration e = attrs.getAll();
while (e.hasMoreElements()) {

Attribute attr = (Attribute) e.nextElement();
System.out.println(attr.getID());
for (int i = 0; i < attr.size(); i++) {
if (i > 0) {
System.out.println(",");
} else {
System.out.println(attr.get(i));
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
AI 代码解读

例子2.
通过类名字检索

import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;

/**
* @author Jack.Wang
* 
*/
public class AllSearch {
public static void main(String[] args) {
try {
InitialDirContext ctx = new InitialDirContext();
SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration objs = ctx
.search(
"ldap://ldap.jack.com/o=test search, dc=test,dc=com",
"(objectClass=*)", searchControls);
while (objs.hasMoreElements()) {

SearchResult match = (SearchResult) objs.nextElement();
System.out.println(match.getName());
Attributes attrs = match.getAttributes();
NamingEnumeration e = attrs.getAll();
while (e.hasMoreElements()) {

Attribute attr = (Attribute) e.nextElement();
System.out.println(attr.getID());
for (int i = 0; i < attr.size(); i++) {
if (i > 0) {
System.out.println(",");
} else {
System.out.println(attr.get(i));
}
}
}
}
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BasicAttributes searchAttrs = new BasicAttributes();
}
}
AI 代码解读
 例子3.
      基于文件系统的 binding
AI 代码解读
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;

public class TestBinding {
private String serverName = "jackhost";

private int portNumber = 1433;

private String login = "jack";

private String password = "19810622";

private String databaseName = "jack";

private String filePath = "jdbc/jack";

public TestBinding() {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
env.put(javax.naming.Context.PROVIDER_URL, "file:d:\\");
try {
Context ctx = new InitialContext(env);
AnalogyDB ds = new AnalogyDB();
ds.setServerName(serverName);
ds.setPortNumber(portNumber);
ds.setUser(login);
ds.setPassword(password);
ds.setDatabaseName(databaseName);
ds.setDescription("JDBC Datasource connection.");
ctx.bind(filePath, ds);
ctx.close();
} catch (Exception e) {
System.err.println("ERROR " + e.getMessage());
}
}

public static void main(String[] args) {
TestBinding test = new TestBinding();
}
}
AI 代码解读
    例子3.
    基于文件系统的 lookup
AI 代码解读
import java.sql.Connection;
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;

/**
* 
* @author Jack.Wang
* 
*/
public class TestLookup {
public TestLookup() {
try {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
env.put(javax.naming.Context.PROVIDER_URL, "file:d:\\");
Context ctx = new InitialContext(env);
AnalogyDB ds = (AnalogyDB) ctx
.lookup("jdbc/jack");
Connection connection = ds.getConnection();
System.out.println("Connection Established.");
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
TestLookup test = new TestLookup();
}
}
AI 代码解读

本文转自BlogJava 新浪blog的博客,原文链接:Java 在基于文件系统的 JNDI 和 JNDI+LDAP 协议应用实例,如需转载请自行联系原博主。

目录
打赏
0
0
0
0
39
分享
相关文章
Java也能快速搭建AI应用?一文带你玩转Spring AI可落地性
Java语言凭借其成熟的生态与解决方案,特别是通过 Spring AI 框架,正迅速成为 AI 应用开发的新选择。本文将探讨如何利用 Spring AI Alibaba 构建在线聊天 AI 应用,并实现对其性能的全面可观测性。
Java和Python在企业中的应用情况
Java和Python在企业中的应用情况
159 7
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
CRaC技术助力ACS上的Java应用启动加速
容器计算服务借助ACS的柔性算力特性并搭配CRaC技术极致地提升Java类应用的启动速度。
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
Java二维数组的使用技巧与实例解析
本文详细介绍了Java中二维数组的使用方法
80 15
Java字面量详解:概念、分类与使用实例
本文介绍了Java字面量的概念、分类及应用。
82 11
Java中的this关键字详解:深入理解与应用
本文深入解析了Java中`this`关键字的多种用法
413 9
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
67 5
【潜意识Java】了解并详细分析Java与AIGC的结合应用和使用方式
本文介绍了如何将Java与AIGC(人工智能生成内容)技术结合,实现智能文本生成。
321 5
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等