JNDI学习

JNDI学习

JNDI学习

What is JNDI

JNDI(Java Naming and Directory Interface)是一个API,它允许Java应用程序发现和查找基于名称的资源。JNDI的设计目的是提供一种通用的方式来访问各种命名和目录服务。

主要功能:

  • 命名Naming:通过名称来查找和绑定Java对象。命名服务的典型用途包括查找数据库连接、Java RMI对象、EJB(Enterprise JavaBeans)等。

  • 目录Directory:除了命名功能,JNDI还支持访问目录服务,允许在对象中存储和检索属性。目录服务使得可以对命名对象进行更复杂的查询和操作。目录服务 = 命名服务 + 包含属性的对象

EXAMPLE(RMI + JNDI)

step 1: 创建InitialContext()初始化上下文

step 2: 将远程服务对象绑定到指定url

rmi_1

rmi_1

rmi_1

初识RMI

  • 概念:Java RMI (Remote Method Invocation) 是一种用于构建分布式应用程序的机制,允许Java对象调用远程服务器上的方法。
Read more
CommonsCollections
CommonsCollections3

CommonsCollections3

CommonsCollections3

特点

更换命令执行方式,之前是 Runtime.getRuntime().exec("calc"); ,但很多时候可能存在Runtime过滤的情况,因此将执行命令方式更换为类动态加载执行命令

Read more
CommonsCollections6

CommonsCollections6

CommonsCollections6

前景提要

前面两种链子都依赖于jdk版本,在更新后的jdk版本中AnnotationInvocationHandler类已有更新,难以利用

除了利用AnnotationInvocationHandler类的readObject方法以外,还可以利用HashMap类的readObject方法

Read more
CommonsCollections1

CommonsCollections1

CommonsCollections1

前景提要

jdk版本:8u65 下载链接:Java 存档下载 — Java SE 8 | Oracle 中国

cc版本:3.2.1

1
2
3
4
5
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>

用https://hg.openjdk.org/jdk8u/jdk8u/jdk/archive/af660750b2f4.zip下载到的zip文件中的src/share/classes目录下的sun添加到jdk_8u65/目录下的src.jar解压后的src文件中,再将src/目录添加到项目的sdk源路径中,可实现将class文件转换为java(方便调试)

image-20240608170247917

Read more
Java序列化和反序列化