抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

Java 交互管理工具——SecureJSH 发布

2007 年 7 月 26 日

JavaEye 上活跃的开发者Complystill(歆渊)最近发布了自己的开源 SecureJSH 项目,提供了一个通过 SSH 交互进行 Java 应用开发或者管理的工具。

在项目的介绍中可以得知,SecureJSH 与 Ptyhon 里面的 ipython 或者 Ruby 里面的 irb 非常相似。它们都允许交互式运行语言的代码,以方便跟踪或者调试应用。但是,Java 与 Ruby、Python 不同,后者是动态脚本语言,它们天生具有解释执行的特点(注意:当然 Python 支持预编译,Ruby 也将在 YARV 中开始支持,这里指它们的解释执行状态)。我们常见的 Python 和 Ruby 发行版本基本上都包括自己的解释器(这也是它们的核心组件),但是 Java 是一种需要中间编译过程的语言,默认情况下它无法直接解释运行,也没有相应的解释器。

那么 SecureJSH 是如何实现的呢?读者首先会想到 JSR-223,这个 API 可以自己扩展脚本语言支持,比如 rhino 是 Javascript 解释引擎。但是使用它难以实现交互操作,因为它必须输入一个相对完整的脚本才可以运行,这样会丧失一部分交互性。SecureJSH 实际上是使用了 JDK 6.0 的新特性 Java Compiler API(JSR-199),它提供了一组 API 来让程序可以动态地访问 Java 编译器的接口,这样就可以使用 Java 编译器动态检查代码语法或者动态根据 Java 源码生成可以执行的字节码。这种方式与 ASM 的编程直接生成字节码不同,它能直接将 Java 源码转换为字节码,XRuby 的主力开发者郑晔(网名 dreamhead)在他的 Blog 中这样对比了两种方案

之前,刚刚在 Blog 中提到 ASM ,里面的代码生成工作是通过直接写 字节码完成的。现在有了 Compiler API,可以考虑生成代码以 Java 源码的形式完成,然后,通过调用 Compiler API 对源码进行动态编译,这样,可以达到同直接写字节码类似的作用。使用 Compiler API,肯定不如直接生成字节码来得高效,但对于不了解 JVM 指令的人来说这也许是一种解决方案。

可见 JSR-199 不是最高效的字节码生成方案,但是更方便使用。Java Compiler API 不是为了取代 ASM 这样的方案的,它的本意是以编程的方式实现实时编译及信息反馈。Java 目前的主要架构师之一 Peter von der Ahé曾经在他的 Blog 对谁需要使用 Java Compiler API 这个问题做了如下解释

99% 的 Java 开发者都不需要了解 Java Compiler API。只有少数的开发者会直接应用这个 API。但是 IDE、Java EE 应用程序服务器、Maven 或者 Ant 还有测试框架的开发者却不一样,他们有一个共同点,就死需要调用编译器将 Java 源码转换为类文件(他们是这个 API 的潜在用户)。

可见 JSR-199 的产生主要是面向热部署或者增量编译这样的场合,但是 SecureJSH 的产生扩展了 Java Compiler API 的应用场景,同时也增强了 Java 和 JVM 的交互性。Complystill 这样介绍了 SecureJSH 的应用场景和需求

SecureJSH 允许 Java 编写的服务器端应用程序为管理员、客户、开发者和客户端服务提供一个安全 shell,这里可以交互性地让 Java 语言逐句运行。SecureJSH 需要 JDK 6.0 或者 JRE 6.0 加 JAVAC(在 classpath 中)来运行。

SecureJSH 的官方首页这样描述了它的主要特性: - 安全:SecureJSH 在服务器端实现了 RFC-4251,SSH 2.0 协议,支持公钥认证,这种方式方便安全(不需要每次输入密码)。

  • 交互式执行:传统的方式下,在运行 Java 源代码之前你必须将它们编译为字节码。但是使用 SecureJSH,编译的过程是透明完成的,所以你只需要随意输入一些 Java 表达式(就可以运行)。这意味着你可以使用你书写应用程序时完全相同的语法,与最新的 Java 语言规范同步。你可以在你的 Java 项目源码和 SecureJSH 终端里面拷贝&粘贴任何代码,都没有问题。
  • 智能命令识别,UNIX Shell 风格:不像 JSR-223(Java Scripting Engin,Java 脚本引擎)对 Java 语言的脚本的支持,在(Java 脚本引擎)里面你必须将 Java 类的全部代码输入后才可以执行,secureJSH 更加智能和人性化,如果你输入了不完整的 Java 表达式,它会自动提示你进行多行的输入,然后将这些表达式包装到一个预先定义的类结构中来执行。它是一个真正的 Shell。
  • 没有相互干扰,最小化资源消耗:SecureJSH 没有需要储存在 JVM 范围的静态资源,每一个实例只消耗很少量的资源(基于 NIO 实现,所有的 SSH 通讯都由一个线程处理)。你可以按照你的想法在一个 JVM 里面运行任意多个 shell 服务,包括 Java 应用程序服务器的 JVM。

作为一个开源项目,SecureJSH 使用了 ganymed 的纯 Java 实现的 SSH 2.0 库,并使用 Java NIO 编写了网络服务,代码质量很高。据 Comply Still 介绍,SecureJSH 最初是为内存数据库 TOB 设计的,为这个面向对象数据库提供交互访问的接口,但是后来作者发现它可以被应用在很多场合,所以单独开源发布。作为 Java 开发者,您可以从这里下载源码从中学习 SSH 2.0、NIO 网络服务、Java Compiler API 的使用方法,相信一定会有所收获。

2007 年 7 月 26 日 04:271047

评论

发布
暂无评论
发现更多内容

【LeetCode】所有奇数长度子数组的和Java题解

HQ数字卡

算法 LeetCode 9月日更

Excelize 开源五周年 🎉

xuri

golang Excel Excel数据分析 Go 语言 Excelize

JavaScript数组常用的方法总结

孙叫兽

JavaScript 前端 数组

网络攻防学习笔记 Day123

穿过生命散发芬芳

9月日更 互联网安全 流量采集

linux网络包收发讲解

赖猫

Linux

Java全面学习视频书籍,阿里架构师看到都觉得好,Java自学教程

程序猿一枚

Java 程序员 后端

粗放生长时代结束,高精地图收紧灰色地带

脑极体

epoll底层实现源码及epoll反应堆模型

hanaper

Go 专栏|开发环境搭建以及开发工具 VS Code 配置

AlwaysBeta

go golang golang新手 Go 语言 Go 语言从入门到实践

【Flutter 专题】59 图解 Android Native 获取 Flutter 资源文件

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

CAP理论是个什么东东?

卢卡多多

CAP原理 CAP理论 9月日更

Java-进阶:多线程1,Java程序员必须掌握的技术

程序猿一枚

Java 程序员 后端

Java中高级核心知识全面解析,Java工程师需要掌握的技能

程序猿一枚

Java 程序员 后端

LeetCode刷题13-简单-罗马数字转整数

ベ布小禅

9月日更

Java中高级核心知识全面解析,Java大厂高级面试题灵魂100问

程序猿一枚

Java 程序员 后端

【LeetCode】二叉搜索树的后序遍历序列Java题解

HQ数字卡

算法 LeetCode 9月日更

在线JSON转Mongoose工具

入门小站

工具

架构实战营模块七作业

老猎人

架构实战营

JDK 8 及其后续 JDK 中 Period 和 Duration

HoneyMoose

我们为什么要学习TypeScript ?

法医

typescript 前端 9月日更

HTTP系列之:HTTP缓存

程序那些事

缓存 Netty HTTP 程序那些事

前端开发css这些样式你还熟悉吗,Chrome是必备技能

前端史塔克

CSS html css3 前端 前端开发

找啊找啊找工长,找到一个好工长

escray

生活记录 9月日更

C语言:十进制、十六进制数据互换

不脱发的程序猿

C'语言 进制转换

C语言:十进制、BCD码互换

不脱发的程序猿

C语言 十进制、BCD码互换

08. 语音识别与第二次AI热潮

数据与智能

人工智能

架构实战训练营|作业|模块2

Frode

#架构实战营

IntelliJ IDEA 如何快速查看提交代码的对比

HoneyMoose

Java中的注解到底是怎么一回事?,jvm原理面试题

程序猿一枚

Java 程序员 后端

LeetCode题解:143. 重排链表,数组,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

Linux之lastb命令

入门小站

Linux

Study Go: From Zero to Hero

Study Go: From Zero to Hero

Java交互管理工具——SecureJSH发布-InfoQ