Arthas 3.5.0 版本发布,支持反编译打印行号和统一鉴权

2021-03-17 11:47:50 +08:00
 hengyunabc

Arthas是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。

Arthas 最新发布了 3.5.0 版本,最近几个 release 版本带来下面两个主要特性:

反编译支持行号

Arthas 开源之后的第一个 issue 就是jad命令能否支持显示行号:

jad命令多年以后终于支持行号了,“不忘初心”😂,效果如下:

$ jad demo.MathGame main

       public class MathGame {
           private static Random random = new Random();
           public int illegalArgumentCount = 0;

           public static void main(String[] args) throws InterruptedException {
               MathGame game = new MathGame();
               while (true) {
/*16*/             game.run();
/*17*/             TimeUnit.SECONDS.sleep(1L);
               }
           }

           public void run() throws InterruptedException {
               try {
/*23*/             int number = random.nextInt() / 10000;
/*24*/             List<Integer> primeFactors = this.primeFactors(number);
/*25*/             MathGame.print(number, primeFactors);
               }
               catch (Exception e) {
/*28*/             System.out.println(String.format("illegalArgumentCount:%3d, ", this.illegalArgumentCount) + e.getMessage());
               }
           }

           public static void print(int number, List<Integer> primeFactors) {
               StringBuffer sb = new StringBuffer(number + "=");
/*34*/         for (int factor : primeFactors) {
/*35*/             sb.append(factor).append('*');
               }
/*37*/         if (sb.charAt(sb.length() - 1) == '*') {
/*38*/             sb.deleteCharAt(sb.length() - 1);
               }

如果想不显示行号,使用--lineNumber false参数即可。

鉴权支持

鉴权主要通过两方面来支持:

配置用户名和密码

在 Arthas attach 时,可以在命令行指定密码。比如:

java -jar arthas-boot.jar --password ppp

在 telnet console 里鉴权

连接到 arthas 后,直接执行命令会提示需要鉴权:

[arthas@37430]$ help
Error! command not permitted, try to use 'auth' command to authenticates.

使用auth命令来鉴权,成功之后可以执行其它命令。

[arthas@37430]$ auth ppp
Authentication result: true

Web console 密码验证

打开浏览器,会有弹窗提示需要输入 用户名 和 密码。

成功之后,则可以直接连接上 web console 。

HTTP API 验证

Arthas 采用的是 HTTP 标准的 Basic Authorization,客户端请求时增加对应的 Authorization header 即可。

例如,用户名是:admin,密码是 admin,则组合为字符串: admin:admin,base64 结果是: YWRtaW46YWRtaW4=,则 HTTP 请求增加Authorization header:

curl 'http://localhost:8563/api' \
  -H 'Authorization: Basic YWRtaW46YWRtaW4=' \
  --data-raw '{"action":"exec","command":"version"}' 

总结

招聘

最后打个广告,我们正在寻找小伙伴,特别是深圳的同学,欢迎大家加入。

1467 次点击
所在节点    Java
3 条回复
monkeyWie
2021-03-17 12:03:23 +08:00
学历是硬性要求吗,好想加入你们团队🤣
Kasumi20
2021-03-17 12:13:43 +08:00
性别是硬性要求吗,好想加入你们团队🤣
hengyunabc
2021-03-17 12:48:58 +08:00
@monkeyWie 现在要求越来越严格了😂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/762404

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX