Hutool Hutool
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
  • 快速入门

  • 核心(hutool-core)

    • AI(Hutool-ai)

    • 注解(annotation)

    • 数组(array)

    • JavaBean(bean)

    • 缓存(cache)

    • 类加载器(classloader)

    • 编码解码(codec)

    • 集合(collection)

    • 比较器(comparator)

    • 压缩(compress)

    • 类型转换(convert)

    • 数据(data)

    • 日期时间(date)

    • 异常(exception)

    • 函数(func)

    • IO流(io)

    • 语言特性(lang)

    • Map(map)

    • 数字数学(math)

    • 网络(net)

    • 对象池(pool)

    • 反射(reflect)

    • 正则(regex)

    • 服务提供(spi)

    • 聚合操作(stream)

    • 字符串文本(text)

    • 并发和线程(thread)

    • 树结构(tree)

    • 工具集合(util)

      • 简介
      • 随机数工具-RandomUtil
      • ByteUtil
      • CharsetUtil
      • EnumUtil
      • JdkUtil
      • JNDIUtil
        • 功能介绍
        • 核心方法
          • 1. 上下文创建
          • createInitialDirContext
          • createInitialContext
          • 2. 目录属性获取
          • getAttributes
        • 应用场景
          • 1. DNS查询
          • 2. JMS资源访问
          • 3. 数据库连接池访问
          • 4. LDAP目录服务访问
        • 注意事项
        • 总结
      • ObjUtil
      • RuntimeUtil
      • SystemUtil
    • XML操作(xml)

  • 定时任务(hutool-cron)

  • 加密(hutool-crypto)

  • 数据库(hutool-db)

  • 扩展(hutool-extra)

  • HTTP(hutool-http)

  • 日志(hutool-log)

  • 配置文件(hutool-setting)

  • JSON(hutool-json)

  • Office办公(hutool-poi)

  • 套接字(hutool-socket)

  • GUI(hutool-swing)

  • 指南
  • 核心(hutool-core)
  • 工具集合(util)
Hutool
2026-01-03
目录

JNDIUtil

JNDIUtil是Hutool中用于处理Java命名和目录接口(Java Naming and Directory Interface,JNDI)的工具类,提供了创建JNDI上下文和获取目录对象属性的功能。

# 功能介绍

  • 上下文创建:支持创建InitialDirContext和InitialContext对象
  • 环境参数支持:可以通过Map配置JNDI环境参数
  • 目录属性获取:提供获取指定URI对象属性的方法
  • 异常封装:将JNDI相关异常封装为HutoolException,统一异常处理

# 核心方法

# 1. 上下文创建

# createInitialDirContext

创建InitialDirContext对象,用于访问目录服务。

// 创建默认的InitialDirContext
InitialDirContext dirContext = JNDIUtil.createInitialDirContext(null);

// 使用环境参数创建InitialDirContext
Map<String, String> env = new HashMap<>();
env.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory");
env.put("java.naming.provider.url", "dns:");
InitialDirContext dirContext = JNDIUtil.createInitialDirContext(env);

# createInitialContext

创建InitialContext对象,用于访问命名服务。

// 创建默认的InitialContext
InitialContext context = JNDIUtil.createInitialContext(null);

// 使用环境参数创建InitialContext
Map<String, String> env = new HashMap<>();
env.put("java.naming.factory.initial", "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
env.put("java.naming.provider.url", "tcp://localhost:61616");
InitialContext context = JNDIUtil.createInitialContext(env);

# 2. 目录属性获取

# getAttributes

获取指定容器环境对象的属性。

// 获取DNS记录属性
Attributes attributes = JNDIUtil.getAttributes("dns:hutool.cn", "A", "MX");

// 遍历属性
NamingEnumeration<? extends Attribute> all = attributes.getAll();
while (all.hasMore()) {
    Attribute attr = all.next();
    Console.log(attr.getID() + ": " + attr.get());
}

# 应用场景

# 1. DNS查询

使用JNDI进行DNS查询,获取域名的各种记录:

// 获取域名的A记录(IPv4地址)
Attributes attributes = JNDIUtil.getAttributes("dns:hutool.cn", "A");
Attribute aRecord = attributes.get("A");
if (aRecord != null) {
    Console.log("A记录: " + aRecord.get());
}

// 获取域名的MX记录(邮件服务器)
Attributes mxAttributes = JNDIUtil.getAttributes("dns:hutool.cn", "MX");
Attribute mxRecord = mxAttributes.get("MX");
if (mxRecord != null) {
    Console.log("MX记录: " + mxRecord.get());
}

# 2. JMS资源访问

在Java消息服务(JMS)中,使用JNDI获取连接工厂和目的地:

// 配置JMS环境
Map<String, String> env = new HashMap<>();
env.put("java.naming.factory.initial", "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
env.put("java.naming.provider.url", "tcp://localhost:61616");
env.put("queue.TestQueue", "TEST.QUEUE");

// 创建InitialContext
InitialContext context = JNDIUtil.createInitialContext(env);

// 获取连接工厂
ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory");

// 获取队列
Queue queue = (Queue) context.lookup("TestQueue");

// 使用连接工厂和队列进行消息收发

# 3. 数据库连接池访问

在Java EE应用中,通过JNDI获取数据库连接池:

// 创建InitialContext
InitialContext context = JNDIUtil.createInitialContext(null);

// 查找数据源
DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDataSource");

// 获取数据库连接
Connection connection = dataSource.getConnection();

// 使用连接进行数据库操作

# 4. LDAP目录服务访问

使用JNDI访问LDAP目录服务:

// 配置LDAP环境
Map<String, String> env = new HashMap<>();
env.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory");
env.put("java.naming.provider.url", "ldap://ldap.example.com:389");
env.put("java.naming.security.authentication", "simple");
env.put("java.naming.security.principal", "cn=admin,dc=example,dc=com");
env.put("java.naming.security.credentials", "password");

// 创建InitialDirContext
InitialDirContext dirContext = JNDIUtil.createInitialDirContext(env);

// 搜索LDAP条目
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<SearchResult> results = dirContext.search("dc=example,dc=com", "(objectClass=person)", controls);

// 处理搜索结果
while (results.hasMore()) {
    SearchResult result = results.next();
    Console.log("Found: " + result.getNameInNamespace());
}

# 注意事项

  1. 异常处理:JNDIUtil将NamingException封装为HutoolException,使用时需要注意捕获和处理异常
  2. 环境参数:创建上下文时,环境参数的键值对需要根据具体的JNDI服务提供商进行配置
  3. 资源关闭:使用完JNDI上下文后,应调用close()方法关闭资源,释放连接
  4. 权限问题:某些JNDI操作可能需要特定的权限,如DNS查询、LDAP访问等
  5. URL格式:getAttributes方法的URI参数格式为[scheme:][name]/[domain],不同服务有不同的URL格式要求

# 总结

JNDIUtil提供了简洁易用的JNDI操作接口,简化了JNDI上下文的创建和目录属性的获取。通过JNDIUtil,开发者可以方便地访问各种JNDI服务,如DNS、JMS、数据库连接池、LDAP等。无论是在Java EE应用中还是在独立Java应用中,JNDIUtil都能提供高效、可靠的JNDI操作支持。

JdkUtil
ObjUtil

← JdkUtil ObjUtil→

Theme by Vdoing | Copyright © 2025-2026 Hutool | Apache-2.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式