上篇文章讲了使用远程工具远程部署服务允许在后台不挂断运行,这样基本上已经可以满足正常项目上的需求了,不过我们还可以在此基础上继续优化操作做的更好。
将jar包加密+将服务转化为服务器系统级服务,设置允许开机自启,这就是优化后的方案。
每个公司都有自己的一套框架以及算法,各个项目都在此基础上做修改和优化以及针对客户需求进行定制化开发。
我们正常使用idea对spring boot项目进行打包时,会将可编辑的.java项目转化为不可编辑的.class文件的jar包,虽然不可编辑但是这个jar包其实是可视的,你可以通过复制粘贴方式获取其中经过编译后的代码,也可以通过市面上的一些反编译工具例如jad进行反编译将其再次转化为可编辑的Java项目。试想,项目内的框架和算法是一个公司的辛辛苦苦写出来的,本来是用来售卖赚钱的,却被人白嫖了,那多亏!!!因此,jar包加密势在必行!
本机环境:Windows10系统 服务器系统是:Windows系统 Windows系统下使用Xjar对jar包进行加密:创建一个项目用来运行加密转换代码,项目的pom文件中引入maven依赖:
jitpack.io
https://jitpack.io
com.github.core-lib
xjar
4.0.1
org.apache.commons
commons-compress
1.19
com.github.core-lib
loadkit
v1.0.1
Windows系统安装go环境:
由于加密转换代码需要使用go环境,需要部署一下,当然这只是为了对jar包进行加密转换,服务器上无需安装go环境。
下载go安装包:Go下载 - Go语言中文网 - Gong中文社区
安装,一路next直到安装完成
环境部署:
配置环境变量 GOROOT 安装目录:
配置path变量:cmd 查看go版本:
加密转换代码:
加密的密码自己设置,加密前后文件路径和名称自己修改
package com.example.demo.utils;
import io.xjar.XCryptos;
public class XjarPackage {
public static void main(String[] args) {
try {
XCryptos.encryption()
.from("D:\xjar\加密前\webdemo-0.0.1-SNAPSHOT.jar")
// 加密的密码
.use("123")
// 要加密的资源
.include("*.class")
.include("*.xml")
.include("*.yml")
// 加密后的jar,此时:通过jd-gui反编译失败
.to("D:\xjar\加密后\webdemo-0.0.1-SNAPSHOT.jar");
System.out.println("加密完成");
}catch (Exception e){
e.printStackTrace();
}
}
}
运行代码:
运行代码后绘制你设置的加密后的文件路径下加密后的文件,此时该jar包内的.class文件双击打开后,不显示内容并且使用反编译工具无法反编译。而且加密后的jar包也无法使用正常的java -jar 命令运行
将jar包改为可以正常运行的项目:
在加密后的文件夹中进入cmd命令窗口,使用 go build xjar.go 命令创建xjar.exe运行文件
go build xjar.go
使用 xjar java -jar xx.jar 命令即可正常运行jar包了
xjar java -jar xx.jar
将xjar.exe文件和加密后的jar包统一都上传到windows系统的服务器中的同一个路径下,使用该命令即可以正常运行。
由于远程服务器有很多是Linux系统的,这边再补充一下Linux系统下jar包的加密运行。
服务器系统是Linux:这里给一个教程:使用 xjar 加密 jar 包,并部署到 linux 服务器中。_明朗月,潇水寒-CSDN博客
xjar加密,我们追根溯源,查明源码会发现,无法使用java -jar直接运行加密后的jar包的原因是你在加密时候设置了密码,jar包在运行时候就会让你输入正确的密码,输入正确的话也是可以直接运行成功的。
这里的返回值是 AES/CBC/PKCS5Padding 128 128 设置的密码
正确输入这四个参数,也可以正确运行jar包项目(我这边设置的密码是123)
Windows系统启动成功: Linux系统启动成功:由此想到平常的压缩包其实也是可以设置密码的,点击查看和解压都需要输入密码才可以,那么这两者有何区别?我能否将jar包也设置成这样添加一个密码,当打开查看和运行时候让输入密码,其实也是可以达成我们想要加密jar包不外泄的目的的。 使用winsw将spring boot项目部署成服务器系统级服务运行开机自启
虽然我们可以将服务在后台不挂断运行,但是难保项目现场会出现断电情况,因此需要设置服务开机自启动。
服务器是Windows系统:到github上下载 https://github.com/winsw/winsw/releases
xml文件是给的示例使用文件,.exe则根据自己电脑的型号选择对应下载
部署服务:我将配置文件修改了一下,并且都改名为winsw
webDemo webDemo 一个用来测试的springboot项目 java -jar D:xjar加密后webdemo-0.0.1-SNAPSHOT.jarD:xjar加密后
在该目录下启动cmd窗口,输入 winsw install 即可将spring boot服务改为系统级别服务,可以在任务管理器中查看,并启停。或者使用命令行: net start/stop webDemo
删除服务:
在该目录下进入cmd执行命令 winsw uninstall
服务器是Linux系统: 设为系统级服务:
在终端运行如下命令 我这边的项目名称设置为webDemo
sudo In -s /home/admin/Demo/webdemo-0.0.1-SNAPSHOT.jar /etc/init.d/webDemo启停服务:
终端执行如下命令,可实现服务的启动和停止
service gdmm-wms start/stop设置开机自启:
终端执行如下命令,设置开机自启
systemctl enable webDemo



