在生产环境中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/
相关推荐
当一个需要切换数据源的方法被调用时,通过反射或其他机制获取该方法上标注的数据源信息,然后根据这些信息从数据源池中获取对应的数据源,并将其设置为当前线程的数据源。在方法执行完毕后,需要将数据源恢复到原始...
Adapter是连接ListView和数据源的桥梁,它将数据转化为ListView可以显示的View。通常,开发者会创建一个继承自BaseAdapter的自定义Adapter,重写其中的方法,如`getCount()`、`getItem()`、`getItemId()`以及`...
总结起来,Go-grpcall是一个提升GRPC客户端开发效率的工具,它利用反射技术简化了服务调用,并且能够方便地用于构建如grpc-gateway这样的代理中间件。对于Go语言开发者而言,掌握这个库的使用可以提高项目开发的灵活...
- **透明处理**: 对数据源连接和 PreparedStatement 进行透明化处理,使传统驱动和未入池的数据源也能得到统一管理。 - **JNDI 支持**: 适用于大量基于 JNDI 的命名服务,其数据源支持引用和序列化。 - **接口兼容性...
1. 数据源管理:统一管理和配置数据库连接,比如使用`DataSource`来获取连接。 2. SQL生成:根据注解信息,动态生成SQL语句,支持条件查询、排序、分页等。 3. CRUD操作:提供通用的`save()`, `update()`, `delete()...
总结来说,“基于反射+配置文件动态选择数据库”是Java开发中一种高效且灵活的策略,它利用反射实现动态加载和执行代码,结合配置文件实现数据库连接的动态切换,为复杂应用提供了解耦和可扩展的解决方案。...
其中的TCP反射攻击是利用了游戏的联机网络对战功能,以及游戏客户端创建的对战房间作为反射源,进行DDoS反射放大攻击。在攻击过程中,攻击者通过发送UDP请求包至游戏服务器,利用服务器响应远大于请求的特性,放大了...
`AddItem<T>`方法利用了泛型和反射技术,创建了一个新的T类型对象,并设置其DisplayMember属性为下拉提示文本。这样,当用户打开ComboBox时,第一个选项就是这个提示文本。 在使用示例中,首先创建了一个名为`...
在描述中提到的"使用反射,简单工厂模式实现jdbc数据库操作",意味着开发者利用反射机制动态地创建和调用JDBC对象,而简单工厂模式则用于根据需求创建对应的数据库连接类,提高了代码的灵活性和封装性。 2. JNDI:...
"资料说明.txt"可能提供关于这些文件的详细信息,包括数据解读方法和注意事项。"Readme-说明.htm"则可能是对整个压缩包内容的简要介绍和使用指南。 理解并掌握反射电桥的原理和应用,对于从事电子工程、通信技术、...
对于非root环境,可以尝试利用反射或依赖于用户的授权来获取部分信息,但完整的解决方案往往更具挑战性。在实施过程中,开发者必须注意保护用户隐私,遵守应用市场规定,确保软件的安全性和合规性。
本文将深入探讨如何利用反射技术和元数据信息来实现自定义数据源。 首先,让我们理解什么是反射技术。反射是Java的一种强大特性,允许程序在运行时检查类、接口、字段和方法的信息,并动态地调用对象的方法。在...
通过对反射波的时域和频域分析,可以获取关于故障的信息,例如故障距离、故障类型(如接头故障或绝缘老化)等。 为了验证行波反射法在恶劣环境中的有效性,研究人员进行了电缆接头故障和电缆接头绝缘老化的模拟实验...
在这里,可以利用反射获取的属性信息来设置绑定的路径、模式、转换器等。 5. **绑定到UI控件**:将创建的`Binding`对象应用到UI控件的`DataSource`或`DataBindings`集合,实现UI元素与数据的连接。 6. **处理事件...
在Java环境中,可以利用反射API来获取类和对象的元数据,或者通过JDBC接口连接数据库以获取数据库的元数据。 其次,该平台应具备元数据的管理和组织能力。这包括创建元数据目录,定义元数据分类和标签,以及维护元...
标题 "stm32 加漫反射红外光电传感器" 涉及到的是在嵌入式系统领域,使用STM32微控制器配合漫反射红外光电传感器进行数据采集和处理的应用。STM32是意法半导体(STMicroelectronics)推出的一款基于ARM Cortex-M内核...
本资源提供了基于Kinect的景深数据处理程序的源代码,这对于理解如何利用Kinect获取和解析景深信息非常有帮助。 首先,我们要理解什么是景深数据。景深是指在摄影或图像处理中,图像里清晰成像的范围,即从最近到最...
JNDI注入利用工具 ...获取缓存在某些中的数据源 目录列表 目录遍历 使用File对象列目录 FileDelete 文件删除 使用File对象删除文件 文件读取 文件读取 使用FileInputStream读取文件 文件写入 文件写入 使用