V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hengyunabc
V2EX  ›  Java

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

  •  
  •   hengyunabc ·
    hengyunabc · 2021-03-17 11:47:50 +08:00 · 1631 次点击
    这是一个创建于 1352 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Arthas

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

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

    • 反编译支持行号
    • Telnet/Websocket/HTTP API 统一支持全面的鉴权

    反编译支持行号

    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参数即可。

    鉴权支持

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

    • as.sh/arthas-boot命令行参数支持配置用户名和密码
    • 增加auth命令

    配置用户名和密码

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

    java -jar arthas-boot.jar --password ppp
    
    • 可以通过 --username 选项来指定用户,默认值是arthas

    • 也可以在 arthas.properties 里中配置 username/password 。命令行的优先级大于配置文件。

    • 如果只配置username,没有配置password,则会生成随机密码,打印在~/logs/arthas/arthas.log

      Using generated security password: 0vUBJpRIppkKuZ7dYzYqOKtranj4unGh
      

    在 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
    
    • 可以通过 --username 选项来指定用户,默认值是arthas

    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"}' 
    

    总结

    招聘

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

    3 条回复    2021-03-17 12:48:58 +08:00
    monkeyWie
        1
    monkeyWie  
       2021-03-17 12:03:23 +08:00
    学历是硬性要求吗,好想加入你们团队🤣
    Kasumi20
        2
    Kasumi20  
       2021-03-17 12:13:43 +08:00
    性别是硬性要求吗,好想加入你们团队🤣
    hengyunabc
        3
    hengyunabc  
    OP
       2021-03-17 12:48:58 +08:00
    @monkeyWie 现在要求越来越严格了😂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3669 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:28 · PVG 12:28 · LAX 20:28 · JFK 23:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.