JNDI 介绍和使用

java安全(四) JNDI JNDI JNDI(Java Naming and Directory Interface)是Java提供的Java 命名和目录接口。通过调用JNDI的API应用程序可以定位资源和其他程序对象。JNDI是Java EE的重要部分,需要注意的是它并不只是包含了DataSource(JDBC 数据源),JNDI可访问的现有的目录及服务有:JDBC、LDAP、RMI、DNS、NIS、CORBA 通俗理解,使用jndi作为数据源而不是直接去连接数据库,将数据库交给jndi去配置管理,jndi通过数据源名称去应用数据 阅读详情
JNDI介绍

    JNDI(The Java Naming and Directory Interface,Java命名和目录接口),是一组在Java应用中访问命名和目录服务的API。包括两部分,命名服务和目录服务,其中:

1.命名服务将名称和对象联系起来,使得我们可以用名称访问对象,命名系统中的对象可以是DNS记录中的名称、应用服务器中的EJB组件、LDAP(Lightweight Directory Access Protocol)中的用户Profile.

2.目录服务是命名服务的自然扩展。两者之间的关键差别是目录服务中对象可以有属性(例如,用户有email地址),而命名服务中对象没有属性。因此,在目录服务中,你可以根据属性搜索对象。

JNDI服务可以:访问文件系统中的文件、定位远程RMI注册的对象,访问象LDAP这样的目录服务,定位网络上的EJB组件等等。

对于象LDAP 客户端、应用launcher、类浏览器、网络管理实用程序,甚至地址薄这样的应用来说,JNDI是一个很好的选择。


JNDI架构

    JNDI提供了API(编程接口)和SPI(服务实现接口),要让应用与命名服务或目录服务交互,必须有这个服务的JNDI服务提供者,这正是JNDI 将服务的使用和服务的注册解偶的思想,通常服务提供者都是一组类,这些类为各种具体的命名和目录服务实现了JNDI指定的SPI接口。

JNDI包结构大致如下:

Javax.naming:包含了访问命名服务的类和接口。例如,它定义了Context接口,这是命名服务执行查询的入口。

Javax.naming.directory:对命名包的扩充,提供了访问目录服务的类和接口,提供了DirContext接口,定义了检查和更新目录对象的属性的方法。

Javax.naming.event:提供了对访问命名和目录服务时的时间通知的支持。例如,定义了NamingEvent类,定义了侦听接口。

Javax.naming.ldap:这个包提供了对LDAP 版本3扩充的操作和控制的支持,通用包javax.naming.directory没有包含这些操作和控制。

Javax.naming.spi:这个包提供了一个方法,通过javax.naming和有关包动态增加对访问命名和目录服务的支持。这个包是为有兴趣创建服务提供者的开发者提供的。


JNDI服务提供者

所支持的服务提供者的工厂类如下,其中文件系统服务提供者的工厂类需要从Sun公司单独下载,J2SE 1.4.x没有包含这些类。

上下问INITIAL_CONTEXT_FACTORY的值用于指定 Name Service Provider Factory
               File System                                                             com.sun.jndi.fscontext.RefFSContextFactory 
               LDAP                                                                       com.sun.jndi.ldap.LdapCtxFactory 
               RMI                                                                           com.sun.jndi.rmi.registry.RegistryContextFactory 
               CORBA                                                                    com.sun.jndi.cosnaming.CNCtxFactory 
               DNS                                                                         com.sun.jndi.dns.DnsContextFactory

在使用JNDI之前,需要先获取JNDI的提供者,并在系统注册它。

与JNDI相关的系统属性在javax.naming.Context中定义,常用的属性:

-          java.naming.factory.initial,服务提供者用来创建InitialContext的类名。

-          java.naming.provider.url,用来配置InitialContext的初始url

-          java.naming.factory.object,用来创建name-to-object映射的类,用于NameClassPair和References。

-          java.naming.factory.state,用来创建jndi state的类

对于目录服务,由于一般需要安全设置,还通常使用:

-          java.naming.security.authentication,安全类型,三个值:none,simple或strong。

-          java.naming.security.principal,认证信息。

-          java.naming.security.credentials,证书信息。

-          java.naming.security.protocol,安全协议名。

注册方式:使用System.setProperty注册,如果程序不显示说明,java会在classpath内查找jdni.properties文件来完成注册。

使用方式:对于名字服务由InitialContext开始,目录服务则使用InitialDirContext。它们分别实现了Context和DirContext,这两个接口分别对应名字服务和目录服务的接口,也是JNDI中最重要的两个接口。 


JNDI优点

包含了大量的命名和目录服务,使用通用接口来访问不同种类的服务;可以同时连接到多个命名或目录服务上;建立起逻辑关联,允许把名称同Java对象或资源关联起来,而不必指导对象或资源的物理ID。

利用JNDI的命名与服务功能来满足企业级API对命名与服务的访问,诸如EJB、JMS、JDBC 以及IIOP上的RMI通过JNDI来使用CORBA的命名服务。

JNDI编程示例
JNDI与JDBC:

Context cntxt = new InitialContext(); DataSource ds = (DataSource) cntxt.lookup("jdbc/dpt");

JNDI与JMS:

Properties env = new Properties();
InitialContext inictxt = new InitialContext(env);
TopicConnectionFactory connFactory = (TopicConnectionFactory) inictxt.lookup("TTopicConnectionFactory");

访问特定目录:例如,人是个对象,他有好几个属性,诸如这个人的姓名、电话号码、电子邮件地址、邮政编码等属性。通过getAttributes()方法

Attribute attr = directory.getAttributes(personName).get("email");
String email = (String)attr.get();

通过使用JNDI让客户使用对象的名称或属性来查找对象:
foxes = directory.search("o=Wiz,c=US", "sn=Fox", controls);

通过使用JNDI来查找诸如打印机的例子:
Printer printer = (Printer)namespace.lookup(printerName);
printer.print(document);

浏览命名空间:
NamingEnumeration list = namespace.list("o=Widget, c=US");
while (list.hasMore()) {
NameClassPair entry = (NameClassPair)list.next();
display(entry.getName(), entry.getClassName());
}

常用的JNDI操作
void bind(String sName,Object object);――绑定:把名称同对象关联的过程
void rebind(String sName,Object object);――重新绑定:用来把对象同一个已经存在的名称重新绑定
void unbind(String sName);――释放:用来把对象从目录中释放出来
lookup(String name);――查找:返回目录总的一个对象
void rename(String sOldName,String sNewName);――重命名:用来修改对象名称绑定的名称
NamingEnumeration listBinding(String sName);――清单:返回绑定在特定上下文中对象的清单列表
NamingEnumeration list(String sName);――清单:返回绑定在特定上下文中对象的清单列表

使用JNDI API Java EE应用程序使用JNDI API作为通用的名称查找服务来查找组件、外部资源和组件环境属性。JNDI API公开底层命名协议和实现的详细信息。 阅读详情

相关推荐

【Java代码审计】JNDI注入篇

JNDI (Java Naming and Directory Interface )是 Java 提供的 Java 命名和目录接口。通过调用 JNDI 的 API 可以定位资源和其他程序对象。JNDI 是 Java EE 的重要部分,JNDI 可访问的现有的目录及服务有:JDBC、LDAP、RMI、DNS、NIS、CORBA为了在命名服务或目录服务中绑定 Java 对象,可以使用 Java 序列化来传输对象,但有时候不太合适,比如 Java 对象较大的情况。

大河之犬的博客 5321

JNDI注入学习(看不懂直接喷,别忍着!)

JNDI注入学习(看不懂直接喷,别忍着!)

一剑开天门!的博客 3731

【项目实战】Java中的JNDI(Java命名与目录接口)

JNDI是Java平台提供的一种命名和目录服务接口JNDI提供了一种标准的方式来访问各种命名和目录服务,例如DNS、LDAP、NIS等。

奶爸的编程之路,也就一周冷个三天 868

了解JNDI:Java中的命名和目录服务接口

JNDI(Java Naming and Directory Interface)是Java平台的一个标准API,用于访问和管理命名和目录服务。它提供了一种通用的方式,使开发人员可以在Java应用程序中查找和绑定各种资源。本文将介绍JNDI的基本概念,并提供代码示例来演示如何在Java应用程序中使用JNDI。

鹏鹏2077 5452

JNDI:JNDI注入利用工具

JNDI注入利用工具 介绍 本项目为JNDI注入利用工具,生成JNDI连接并启动初始化相关服务,可用于Fastjson,Jackson等相关突破的验证。 本项目是基于welk1n的 ,在此项目的基础服务框架上,重新编写了攻击利用代码,支持更多更强大的功能,并加入了多种方式进行回显的支持。 QAQ 功能 本工具支持了利用JNDI注入构造多种恶意负载,其中包括: 名称 功能 简介 基本信息 获取服务器基础信息 打印出System.getProperties()中的信息 命令 命令执行 反射调用forkandexec执行命令 数据源黑客 获取Spring DataSource明文 获取缓存在某些中的数据源 目录列表 目录遍历 使用File对象列目录 FileDelete 文件删除 使用File对象删除文件 文件读取 文件读取 使用FileInputStream读取文件 文件写入 文件写入 使用

基于STM32F103与AD8232的便携式心电监测系统设计与实现

本文详细介绍基于STM32F103微控制器与AD8232心电传感器模块的便携式心电监测系统设计与实现。系统通过ADC采集心电信号,结合软件滤波算法处理基线漂移和工频干扰,并利用OLED屏幕实时显示波形,具有低成本、高实用性的特点,适用于健康监测与嵌入式学习。

m5n6o7的博客 737

JNDI的介绍和使用

(1)JNDI简介JNDI:分布式计算环境通常使用命名和目录服务来获取共享的组件和资源。命名和目录服务将名称与位置、服务、信息和资源关联起来。它为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。命名服务提供了一种为对象命名的机制,这样你就可以在无需知道对象位置的情况下获取和使用对象。只要该对象在命名服务器上注册过,且你必须知道命名服务器的地址和该对象在命名服务器上注册的J

mikebibby的专栏 1328

【IIC通信】Chap.1(I2C)IIC通信原理、IIC读写时序详解

IIC通信以两根连线SDA、SCL实现了完善的全双工同步数据传送, 可以方便地构成多机系统和外围器件扩展系统。

Jie_MSD的博客 2万+

linux和windows中jndi区别,JNDI介绍(详解,什么是JNDI)

JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。JNDI可访问的现有的目录及服务有:DNS、XNam 、Novell目录服务、LDAP(Lightweight Directory Access Protocol 轻型目录访问协议)、 CORB...

weixin_39747075的博客 494

COD论文笔记VSCode: General Visual Salient and Camouflaged Object Detection with 2D Prompt Learning

VSCode模型通过引入领域特定提示和任务特定提示,结合提示区分损失,成功地在单一模型中处理多个显著目标检测和伪装目标检测任务。这种方法不仅提高了模型的性能,还展示了其对未见任务的泛化能力。作者使用 Visual saliency transformer ICCV 2021 作为baseline model这张图展示了VSCode模型的整体框架,特别强调了2D提示学习方法。

985小菜鸡 1628

ROS2 Jazzy 学习路线图(2026最新)

摘要: ROS2 Jazzy(LTS版)是2026年长期支持版本,仅适配Ubuntu 24.04。本文提供WSL环境下的学习路线图: 环境搭建(1-2天):配置WSL2+Ubuntu 24.04,安装ROS2 Jazzy及图形工具(VcXsrv、VS Code)。 核心概念(3-5天):掌握节点、话题、服务等通信机制,使用turtlesim和小海龟仿真实践。 开发实战(7-10天):Python/C++节点开发,结合RViz2、Gazebo等工具完成多节点通信和避障项目。 进阶应用(10-15天):导航(N

zheng_ruiguo的专栏 640

JNDI的介绍和配置

1 Tomcat配置JNDI资源 JNDI(Java Naming and Directory Interface),Java命名和目录接口。JNDI的作用就是:在服务器上配置资源,然后通过统一的方式来获取配置的资源。 我们这里要配置的资源当然是连接池了,这样项目中就可以通过统一的方式来获取连接池对象了。 下图是Tomcat文档提供的: 配置JNDI资源需要到<Conte...

qq_26514509的博客 396

MTK 平台功耗优化策略全解析:Clock 管控、GPU 同步与 Preview 降帧实战方案

在中高端移动终端影像系统中,Camera 模块已成为功耗的关键来源之一,尤其是在高帧率拍摄、AI 模式实时预览等场景下,ISP、Sensor、GPU 与 SoC 时钟频率的大幅提升极易引发系统发热与续航瓶颈。MTK 平台基于多级功耗控制机制,构建了包括 Clock Gate 管理、GPU 时序协同、预览流降帧、Pipeline 低功耗切换等在内的影像功耗优化策略。本文聚焦于 MTK Camera 系统中的核心功耗控制点,基于实际项目部署案例,系统拆解其在不同模式下的节能路径设计与调试方法,为终端厂商与影像系

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 2527

JNDI 介绍和Ldap简介

JNDI 是什么 JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的意义和作用,就没有真正掌握J2EE特别是EJB的知识。 那么,JNDI到底起什么作用? 要了解JNDI的作用,我们可以从“如果不用JNDI我们怎样做?用了JNDI后我们又将怎样做?”这个问题来探

sword953852753的专栏 994

059、RealBasicVSR 实战:真实场景视频超分的退化建模与优化技巧

本文分享了RealBasicVSR在真实场景视频超分中的实战经验。针对传统方法假设理想化下采样导致的性能瓶颈,重点阐述了三个关键技术点:1)通过可学习退化编码器建模复杂未知退化过程,避免手动设计退化参数的局限;2)采用双向传播和DCN对齐增强时序一致性;3)组合多种损失函数并优化训练策略(如余弦退火学习率、随机退化增强)。作者结合项目实践指出了显存管理、训练时长、评估指标等常见问题,并给出实用建议:优先验证数据退化复杂度,重视数据预处理,合理调整超参数。文章强调真实场景视频超分的核心在于让模型自适应未知退化

ai技术增长的博客 180

基于RK3588边缘计算平台的人数统计系统设计与实现

针对人数统计场景优化的YOLOv5模型完整的模型转换和部署流程高效的嵌入式推理优化方案低成本、低功耗的部署方案实时性强,满足工业应用需求可扩展性好,适配多种应用场景引入注意力机制,提高小目标检测能力结合多模态信息,增强系统鲁棒性开发可视化管理平台,提升用户体验随着边缘计算和AIoT技术的快速发展,基于深度学习的智能视觉系统必将在更多领域发挥重要作用。本项目为相关应用的开发和部署提供了有价值的参考,为推动人工智能技术的产业化应用做出了积极贡献。

LXY_LOVE36的博客 146

JNDI、JTA和JMS介绍

什么是JNDIJNDI全面总结原理:         在DataSource中事先建立多个数据库连接,保存在数据库连接池中。当程序访问数据库时,只用从连接池中取空闲状态的数据库连接即可,访问结束,销毁资源,数据库连接重新回到连接池,这与每次去直接访问数据库相比,会节省大量时间和资源。         JNDI( Java Naming and DirectoryInterface ),是Java平

小崔的博客 7183

【四足机器人项目实战】四足机器人弹簧倒立摆(SLIP)动力学模型

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言1.动力学建模构型方法2.四足机器人动力学模型(1)多体动力学模型【针对躯干+脚建模】方法一:VMC(VirtualModelController)模型方法二:SLIP模型(2)浮基单体动力学模型【针对躯干建模】【用于MPC】 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对四足机器人动力学模型-VMC、SLIP和浮动机体模型做个简

qq_35635374的博客 7312

java jndi(命名和系统服务接口) 介绍

java JNDI 接口介绍 参考: https://yangzb.iteye.com/blog/242560 毕竟是古老的技术了,现在搜索百度只能看到一堆文字解释看的迷迷糊糊的 找到一篇有实例介绍的,接解析看看 ...

kzcming的博客 518

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java 使用 JNDI 服务

Java 使用 JNDI 详解JNDI 简述使用 JNDI 步骤 JNDI 简述 JNDI 是一个标准的 java 扩展,它提供了一个统一的 API,用于访问多种目录和命名服务。在这方面,它和 JDBC 有点类似。JDBC 编写的代码,可以访问不同的数据库,比如:oracle、sqlserver、mysql等。而 JNDI 编写的代码,可以访问不同的目录或命名服务,比如:LDAP、DNS、JMS ...

xianYiSkill 2319

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

JNDI的使用

JNDI的使用

tyuuhgf的博客 706

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

JNDI的基本应用

JNDI是(JAVA命名和目录接口)的英文简写,它是为JAVA应用程序提供命名和目录访问服务的API(Application Programing Interface,应用程序编程接口)。JNDI中的命名(Naming),就是将Java对象以某个名称的形式绑定(binding)到一个容器环境(Context)中,以后调用容器环境(Context)的查找(lookup)方法又可以查找出某个名称所绑定的Java对象。

怀揣梦想,一颗执着于技术的心从未磨灭,内心住着一颗顽强的小强时刻提醒自己层层突破自我,同时也成就他人 1534

JNDI

1.什么是JNDI? JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JBDI服务和目录之间进行接口(SPI)的实现,有管理者将JNDI API映射为特定的命名入伍和目录系统,是的Java应用程序可以和这些命名服务和目录服务之间进行交

YDCookie的博客 378

Java JNDI使用详解

JNDI基本介绍 JNDI(Java Naming and Directory Interface–Java命名和目录接口)是Java中为命名和目录服务提供接口的API,通过名字可知道,JNDI主要由两部分组成:Naming(命名)和Directory(目录),其中Naming是指将对象通过唯一标识符绑定到一个上下文Context,同时可通过唯一标识符查找获得对象,而Directory主要指将某一对象的属性绑定到Directory的上下文DirContext中,同时可通过名字获取对象的属性同时操作属性。 J

marylgao技术专栏 5044

JNDI 使用

1. 什么是JNDI(Java Naming and Directory Interface) JNDI是用于访问不同命名和目录服务的统一API接口; 2. JNDI的架构和原理 1. 架构: 第一层:java代码,是访问JNDI的代码; 第二层:JNDI API:统一的命名和目录服务...

sunxuechen01的博客 265

JNDI注入

学习JNDI注入原理,分析流程

Bloyet 1322
上一篇: SLF4J+Logback 日志框架使用
下一篇: 提高网站(web应用)访问速度的几点建议(前端)
conquer0715
博客等级 码龄18年 73粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值