xterm EventSource
git地址:https://gitee.com/callens/xterm-event-source
介绍
项目来源
需实现一个在页面上连接linux的服务器的功能
项目中使用的是tomcat,非maven项目(每一个jar包都需要自己手动去下载,这样有个好处是可以知道这个jar包的作用)
浏览了一些git库上的一些项目,发现都是使用websocket,不符合当前项目的需求
项目设计
使用websocket需要进行协议升级,现不支持这种操作,本项目使用EventSource,并且现在Spring也对其进行了支持,
EventSource是在浏览器上发送标志为流的请求,以获得服务器返回的内容
项目逻辑
需保证浏览器支持EventSource这个功能,基本现在主流的浏览器都进行了支持,若浏览器的版本过低,需要对浏览器进行升级处理;
使用xterm获取用户在浏览器上输入的字符信息,这些字符信息不能直接传输到服务端,否则会发生不可预知的错误,需要使用Base64进行加密的方式进行发送,可以使用其他方式进行加密,只要在服务端进行对应的解密即可
当获得了用户输入的信息,使用EventSource把数据发送到服务端,服务端使用jsch进行连接到Linux服务器,获取到Channel,将数据进行Base64解密发送到OutputStream中
读取Channel返回的信息,使用read进行阻塞读取,使用定时任务启动读取操作,定时任务增加了一次重试操作,预防断网的情况
当页面获取到服务器返回的信息时,使用Base64进行解码,将解码之后的数据给xtrem,xterm会解析这些数据并展示出来
业务逻辑
使用用户ID进行区分唯一用户,如果当前的用户ID已经存在,则不能再进行登录使用,可以再重新换一个用户ID
软件架构
本项目使用的技术框架
日志框架:logback(版本1.2.3),slf4j(版本1.7.17)
Spring框架:SpringMVC,SpringWebflux,SpringCore(版本5.2.9)
Json框架:jackson(版本2.12.0)
Commons框架:commons-lang3(版本3.11)
Linux SSH连接框架:jsch(版本0.1.55),jzlib(版本1.1.3)
定时任务框架:quartz(版本2.3.2)
前端页面终端模拟器:xterm(版本4.9)
前端UI:layui(版本2.5.6),jquery(版本3.5.1)
前端编码:base64(版本3.14.1)
JDK版本 1.8
Tomcat版本 8.5
使用说明
- 访问 http://127.0.0.1:8080/xterm/index
输入用户ID,IP地址,端口号,用户名,密码,校验通过之后,进入服务器Shell界面 - 登录成功则跳转到 http://127.0.0.1:8080/xterm/loginSSH
这个页面有一个定时任务,在一秒钟之后进行自动尝试连接linux,连接成功之后我们会进入shell界面
其他
有大神有更好的相法,欢迎进行交流