Arthas获取Spring Context

Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。
https://github.com/alibaba/arthas

Arthas 提供了非常丰富的关于调用拦截的命令,比如 trace/watch/monitor/tt 。但是很多时候我们在排查问题时,需要更多的线索,并不只是函数的参数和返回值。
比如在一个 spring 应用里,想获取到 spring context 里的其它 bean。如果能随意获取到 spring bean,那就可以“为所欲为”了,下面介绍如何利用 Arthas 获取到 spring context。

搜索类 sc -d com.alibaba.dubbo.config.spring.extension.SpringExtensionFactory
找不到对应类,可参考 http://www.zyiz.net/tech/detail-138429.html

获取数据库密码步骤

1、获取 classLoder 的 hash 值

sc -d com.alibaba.dubbo.config.spring.extension.SpringExtensionFactory
class-info com.alibaba.dubbo.config.spring.extension.SpringExtensionFactory
code-source    /data/project/aladdin/second/dubbo-3.2.18-RELEASE.jar
name  com.alibaba.dubbo.config.spring.extension.SpringExtensionFactory
super-class    +-java.lang.Object
class-loader   +-com.youzan.aladdin.container.loader.AladdinClassLoader@ae13544
       +-sun.misc.Launcher$AppClassLoader@18b4aac2
       +-sun.misc.Launcher$ExtClassLoader@7bb52275
classLoaderHash  ae13544

2、获取对应实例数据

ognl -c ae13544 '#context=@com.alibaba.dubbo.config.spring.extension.SpringExtensionFactory@contexts.iterator.next, #context.getBean("dataSource").getPassword()'

3、可调用任务任意的方法

ognl -c ae13544 '#context=@com.alibaba.dubbo.config.spring.extension.SpringExtensionFactory@contexts.iterator.next, #obj=new com.youzan.ebiz.video.channels.item.api.param.wechat.ItemListGetReq(),#obj.kdtId=42163374,#obj.itemIds={1562453283},#context.getBean("wechatChannelConsoleServiceImpl").listAuditStatus(#obj)'
https://alicharles.oss-cn-hangzhou.aliyuncs.com/static/images/mp_qrcode.jpg
文章目录
  1. 1、获取 classLoder 的 hash 值
  2. 2、获取对应实例数据
  3. 3、可调用任务任意的方法