转载:http://hqman.iteye.com/blog/92684,虽然是一篇很老的文章对于小白还是有很大的阅读价值。
对于理解J2EE集群技术不错的文章,虽然是Sun的技术人员撰写的,基本观点还算客观,内容深浅恰当,非常适合刚刚接触集群的朋友阅读,故此大胆翻译过来,放在这里和大家共享,错误难免,欢迎指正。
原链接
Uncover the hood of J2EE Clustering
===================================================================================
JNDI集群实现
J2EE规范要求所有的J2EE容器必须提供JNDI规范的实现。JNDI在J2EE应用程序中的主要角色是用来提供一个间接层,这样资源可以很容易被找到,而不用关心细节。这使得J2EE组件更加可复用。
拥用全特性的集群的JNDI对于J2EE集群是非常重要的。所有的EJB调用都开始于在JNDI树上查找它的Home接口,J2EE供应商根据他们的集群结构采用不同的方式实现JNDI集群。
共享全局JNDI树
WebLogic和Jboss都有一个全局的,共享的,集群范围的JNDI Context供客户端查找和绑定对象,绑定的全局JNDI Context中对象将通过IP广播的方式在集群中复制,这样当一台服务器实例停机后,被绑定的对象仍然可供查找。
图 14 共享的全局JNDI
如图14所示,共享的全局JNDI树实际包括了所有本地JNDI结点上绑定的对象。集群上每个结点都拥有自己的名称服务器,它们与集群中其他服务器相互复制所有的东西。这样每个名称服务器上都拥有其他名称服务器对象树的拷贝。这种冗余结构使得全局JNDI树高可用。
实际上,集群的JNDI树可以被用做两个目的。可以被管理员用来部署对象和服务。在一台服务中部署完EJB模块或JDBC&JMS服务后,JNDI树上的所有对象都将复制到其他服务器实例中。在运行期,程序可以JNDI API访问JNDI树存储或者获取对象,这些对象也将被全局复制。
独立JNDI
Jboss和WebLogic都采用了共享全局JNDI树的方式,Sun JES和IBM WebSphere等采用了每个服务器都拥有独立的JNDI树的方式。在使用独立JNDI树的集群中,成员服务器不必知道或关心集群中其他服务器。这是否意味着不想把JNDI集群呢?所有EJB访问都开始于在JNDI树上查找它们的Home接口,如果没有可集群的JNDI树,集群就根本无用。
实际上,如果J2EE应用程序是相似的,独立的JNDI树仍然可以获得高可用性。当集群中所有实例都有相同的设置以及都部署相同的应用程序集,我们说集群是“相似的”,这种情况下,一种被称为代理的特殊管理工具可以帮助我们获取高可用性,如图15所示:
图 15 独立JNDI
不管是Sun JES还是WebSphere都在集群的实例上安装了结点代理,当部署EJB模块或绑定其他JNDI服务,管理控制员可以向所有的代理发出命令,以此实现与共享全局JNDI相同的效果。
但是独立JNDI的方案不能支持复制在运行期绑定或获取的对象。有以下几个原因:JNDI在J2EE应用程序中的主要角色是用来提供管理外部资源的间接层,并不是用来做数据存储。如果有这样的需求,可以采用具有HA(高可用性)特性的独立的LDAP服务器或数据库。Sun和IBM自己都有这样拥有集群特性的独立的LDAP服务器产品。
中心JNDI
少数J2EE产品使用了中心JNDI方案,这种方案中名称服务器驻留在单一服务器中,所有的服务器实例都注册它们相同的EJB组件和管理对象到单一的服务器中。
名称服务器实现了高可用性,这对客户端是透明的。所有的客户端都在这台服务器中查找EJB组件,但是这种结构意味着复杂的安装和管理,慢慢被多数供应商抛弃。
初始化访问JNDI服务器
当然客户端要访问JNDI服务器的时候,它们需要知道远程JNDI服务器的主机名/IP地址和端口,在全局或是独立JNDI树的方案中,有多个JNDI服务器。客户端第一次访问时应该连接哪个呢?如何获得负载均衡和失效转移呢?
从技术上说,一个软件或硬件负载均衡器可以设在远程客户端和所有的JNDI服务器之间执行负载均和失效转移。但是,很少有供应商实现这种方式,这里有些简单的方案:
lSun JES和Jboss 实现JNDI集群是在“java.naming.provider.url”属性中设置一列用逗号分隔的URL,如java.naming.provider.url=server1:1100,server2:1100:server3.1100:server4.1100客户端将挨个联系列表中的服务器,一旦其中一个响应了便中止。
lJboss同时也实现了自动发现的特性,当设置属性串“java.naming.provider.url”为空时,客户端将试图通过网络广播来发现在一个JNDI服务器。
相关推荐
jboss-web.xml jndi.properties oracle-ds.xml三个文件,EJB+JPA 所需要的一些配置文件
5.JNDI集群实现 5.1.共享全局JNDI树 5.2.独立的JNDI 5.3.中央集中JNDI 5.4.初始化对JNDI服务器的访问 6.EJB集群实现 6.1.SMART STUB 6.2.IIOP运行库 6.3.拦截代理 6.4.EJB的集群支持 6.4.1.EJBHome Stub的集群支持 ...
$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address] where: -C - command executed in the remote classfile. (optional , default command is "open /Applications/...
自用CVE-2018-3191 weblogic反序列化exp。
基于java的开发源码-EJB中JNDI的使用源码例子.zip 基于java的开发源码-EJB中JNDI的使用源码例子.zip 基于java的开发源码-EJB中JNDI的使用源码例子.zip 基于java的开发源码-EJB中JNDI的使用源码例子.zip 基于java的...
JNDI-Injection-Exploit-1.0-SNAPSHOT-all
JNDI注入漏洞 描述 JNDI-Injection-Exploit是用于生成可用的JNDI链接并通过启动RMI服务器,... 我们可以用JNDI-Injection-Exploit生成的链接替换“ rmi://127.0.0.1:1099 / Object”,以测试漏洞。 免责声明 所有信
简单我tomcat5.0中的JNDI应用
本文介绍了用JNDI定义Oracle数据源的方法。
因此,Spring建议替换其已弃用的JNDI Mock实现(请参阅 )。 Simple-JNDI旨在解决的第二个问题是从应用程序中的任何位置轻松访问应用程序配置。 如果您唯一的目的是测试或使用依赖于Tomcat之外的Tomcat JNDI环境的...
TOMCAT8 JNDI对用户名和密码加密
JNDI-Injection-Exploit-1.0-SNAPSHOT-all.zip
详细介绍jndi命名目录服务在企业级开发中的使用
j2ee JNDI 存储 和 读取程序 weblogic
java asm jndi_JNDI-Injection-Exploit,用于log4j2漏洞验证 可执行程序为jar包,在命令行中运行以下命令: $ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address] 其中: -C ...
# JNDI-Inject-Exploit ## 免责声明 本工具仅面向**合法授权的企业安全测试**,如您需测试本工具的可用性请自行搭建靶机环境,在使用本工具进行检测时,您应确保该行为符合当地的法律法规,并且已经取得了足够的...
然后,本地服务器使用包含有效载荷之一的恶意条目进行响应,这对于实现远程代码执行很有用。 动机 除了已知的JNDI攻击方法(通过引用中的远程类加载)之外,此工具还利用的功能带来了新的攻击媒介。 支持的有效载荷...
标签:apacheds-server-jndi-1.0.1.jar.zip,apacheds,server,jndi,1.0.1,jar.zip包下载,依赖包
grails-datasource-jndi-declare 将 jndi 数据源声明为 web.xml 中的资源引用元素的简单 grails 插件 安装 只需将构建依赖项添加到您的 BuildConfig.groovy build ' :datasource-jndi-declare:1.0.0 ' 用法 此插件...
这是两个jar包,包括了commons-beanutils-1.9.2和commons.collections-3.2.1,这两个包是互相配合的。 设0积分,方便下载。