`
lixuanbin
  • 浏览: 135926 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

利用反射获得数据源连接信息

    博客分类:
  • Java
阅读更多

   在生产环境中MySQL以云插件的方式提供给应用,连接凭据由运维掌控而对应用开发者屏蔽,在需要的时候难免有些不便。这时候我们可以采用反射的方式还原出来,代码如下:

import java.lang.reflect.Field;
import org.apache.log4j.Logger;

public class CrackDbInfo {
	protected static final Logger log = Logger.getLogger(CrackDbInfo.class);

	/**
	 * 利用反射获取数据源连接信息
	 * 
	 * @param dataSource
	 * @return
	 */
	public static String retriveCredentials(javax.sql.DataSource dataSource) {
		String result = null;
		try {
			Field host = dataSource.getClass().getDeclaredField("host");
			host.setAccessible(true);
			Object hostValue = host.get(dataSource);
			Field port = dataSource.getClass().getDeclaredField("port");
			port.setAccessible(true);
			Object portValue = port.get(dataSource);
			Field database = dataSource.getClass().getDeclaredField("database");
			database.setAccessible(true);
			Object databaseValue = database.get(dataSource);
			Field user = dataSource.getClass().getDeclaredField("user");
			user.setAccessible(true);
			Object userValue = user.get(dataSource);
			Field pwd = dataSource.getClass().getDeclaredField("password");
			pwd.setAccessible(true);
			Object pwdValue = pwd.get(dataSource);
			result = String
					.format("{\"user\": \"%s\", \"pwd\": \"%s\", \"host\": \"%s\", \"port\": %s, \"database\": \"%s\"}",
							userValue.toString(), pwdValue.toString(), hostValue.toString(),
							portValue.toString(), databaseValue.toString());
		} catch (NoSuchFieldException e) {
			log.error(e.getMessage(), e);
		} catch (SecurityException e) {
			log.error(e.getMessage(), e);
		} catch (IllegalArgumentException e) {
			log.error(e.getMessage(), e);
		} catch (IllegalAccessException e) {
			log.error(e.getMessage(), e);
		}
		return result;
	}
}

 

@see:http://lixuanbin.github.io/2016/06/30/hack-datasource-credentials-via-reflection/

0
2
分享到:
评论

相关推荐

    JNDI:JNDI注入利用工具

    JNDI注入利用工具 ...获取缓存在某些中的数据源 目录列表 目录遍历 使用File对象列目录 FileDelete 文件删除 使用File对象删除文件 文件读取 文件读取 使用FileInputStream读取文件 文件写入 文件写入 使用

    Java开发技术大全(500个源代码).

    listConstructors.java 利用反射机制获取构造器列表 listFields.java 利用反射机制获取成员属性列表 listMethods.java 利用反射机制获取成员方法列表 loadClass.java 动态装载一个类 Shape.java 一个用于测试的...

    国内最全的.net面试题目

    3.datagrid.datasouse可以连接什么数据源 [dataset,datatable,dataview] dataset,datatable,dataview , IList 4.概述反射和序列化 反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、...

    网络安全解答题.docx

    防火墙工作在哪个层 包过滤型工作在OSI网络参考模型的网络层和传输层,它根据数据源地址,、和协议类型等标志确定是否允许通过。只有满足过滤条件的数据包才被转发到相应的目的地,其余数据包则被从中丢弃。应用...

    asp.net知识库

    ASP.NET 2.0 中的数据源控件 使用 ASP.NET 2.0 ObjectDataSource 控件 ASP.NET 2.0 的内部变化 使用SQL Cache Dependency 代替 Ibatisnet 提供的CacheModel ASP.NET 2.0中小心Profile命名冲突 使用ASP.NET 2.0 ...

    Java开发技术大全 电子版

    9.6利用反射获取运行时类信息293 9.6.1使用isInstance()方法判断所属类294 9.6.2获取成员方法信息295 9.6.3获取构造方法信息296 9.6.4获取类的成员属性297 9.6.5根据方法的名称来执行方法299 9.6.6创建新的...

    疯狂JAVA讲义

    1.5.1 编辑Java源代码 12 1.5.2 编译Java程序 13 学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢...

    Visual C++网络通信编程实用案例精选_7

    本书是一本介绍利用Visual C++进行网络通信程序开发的书籍,书中精选了大量网络实例,涵盖了本地计算机网络编程,局域网网络通信编程,IE编程,网络通信协议编程,串口通信编程,代理服务器编程和高级网络通信编程。...

    JAVA_API1.6文档(中文)

    java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java....

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     19.1.3 从容器中获得数据源  19.1.4 由Java应用本身提供数据库连接  19.2 配置事务类型  19.3 把SessionFactory与JNDI绑定  19.4 配置日志  19.5 使用XML格式的配置文件  19.6 小结  19.7 思考题 第20章 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     19.1.3 从容器中获得数据源  19.1.4 由Java应用本身提供数据库连接  19.2 配置事务类型  19.3 把SessionFactory与JNDI绑定  19.4 配置日志  19.5 使用XML格式的配置文件  19.6 小结  19.7 思考题 第20章 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     19.1.3 从容器中获得数据源  19.1.4 由Java应用本身提供数据库连接  19.2 配置事务类型  19.3 把SessionFactory与JNDI绑定  19.4 配置日志  19.5 使用XML格式的配置文件  19.6 小结  19.7 思考题 第20章 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     19.1.3 从容器中获得数据源  19.1.4 由Java应用本身提供数据库连接  19.2 配置事务类型  19.3 把SessionFactory与JNDI绑定  19.4 配置日志  19.5 使用XML格式的配置文件  19.6 小结  19.7 思考题 第20章 ...

    java jdk-api-1.6 中文 chmd

    java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java....

    worldwindjava源码-ex5_starter:ex5_starter

    调用公共数据源,将返回的 JSON 解析为 Java 对象,并将其显示在您的应用程序中(现在可以打印到控制台)。 您必须测试此服务的连接性,并模拟返回的数据,以便您可以快速运行单元测试。 您可以利用的一些示例服务:...

    java api最新7.0

    java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio ...

    JDK_1_6 API

    java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio ...

    JavaAPI1.6中文chm文档 part1

    java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java....

    JavaAPI中文chm文档 part2

    java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java....

Global site tag (gtag.js) - Google Analytics