spring boot项目打包成jar包加密部署服务允许服务器开机自启

        上篇文章讲了使用远程工具远程部署服务允许在后台不挂断运行,这样基本上已经可以满足正常项目上的需求了,不过我们还可以在此基础上继续优化操作做的更好。

        将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 安装目录:

spring boot项目打包成jar包加密部署服务允许服务器开机自启_第1张图片

配置path变量:

spring boot项目打包成jar包加密部署服务允许服务器开机自启_第2张图片

cmd 查看go版本:

 spring boot项目打包成jar包加密部署服务允许服务器开机自启_第3张图片

加密转换代码:

加密的密码自己设置,加密前后文件路径和名称自己修改

package com.example.demo.utils;

import io.xjar.XCryptos;

public class XjarPackage {
    /**
     *jar包加密
     */
    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 命令运行

spring boot项目打包成jar包加密部署服务允许服务器开机自启_第4张图片

spring boot项目打包成jar包加密部署服务允许服务器开机自启_第5张图片

spring boot项目打包成jar包加密部署服务允许服务器开机自启_第6张图片

将jar包改为可以正常运行的项目:

        在加密后的文件夹中进入cmd命令窗口,使用 go build xjar.go 命令创建xjar.exe运行文件

go build xjar.go

spring boot项目打包成jar包加密部署服务允许服务器开机自启_第7张图片

 使用   xjar java -jar xx.jar  命令即可正常运行jar包了

xjar java -jar xx.jar

spring boot项目打包成jar包加密部署服务允许服务器开机自启_第8张图片

         将xjar.exe文件和加密后的jar包统一都上传到windows系统的服务器中的同一个路径下,使用该命令即可以正常运行。

        

由于远程服务器有很多是Linux系统的,这边再补充一下Linux系统下jar包的加密运行。

服务器系统是Linux:

正常情况下,我们使用的都是Windows版本,而服务器是Linux版本,而Linux系统无法运行Windows系统生成的.exe文件,因此需要在Linux系统中安装Go环境。再执行加密脚本。        

Linux安装Go环境:

        1:根据我上面所给的网站下载对应的Linux的版本

        2:下载完后通过远程工具使用  rz   命令上传到Linux系统中指定路径下

        3:在Linux命令行中 cd 到自己选定的目录,执行tar命令进行解压:

tar -C /home/admin/Go -zxvf  go1.17.2.linux-amd64.tar.gz

        4:添加GO环境(GO的解压路径)到系统变量中:

// 这里需要使用root权限,vim进入环境变量中
vim /etc/profile
//输入i进入编辑模式, 在最后一行添加
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
//添加完后按esc退出编辑模式,按shift+:再输入wq按回车退出该文件

        5:保存后输入source /etc/profile 刷新一下

        6:执行 go version,即可验证是否安装成功。

将加密后的jar包和.go文件使用rz命令一起上传到指定文件夹下:

        1.生成xjar文件

go build xjar.go

        2:使用以下命令即可成功运行加密后的jar包

 ./xjar java -jar webdemo-0.0.1-SNAPSHOT.jar

不使用go环境直接使用设置的密码运行:

        xjar加密,我们追根溯源,查明源码会发现,无法使用java -jar直接运行加密后的jar包的原因是你在加密时候设置了密码,jar包在运行时候就会让你输入正确的密码,输入正确的话也是可以直接运行成功的。

spring boot项目打包成jar包加密部署服务允许服务器开机自启_第9张图片

         这里的返回值是     AES/CBC/PKCS5Padding       128      128       设置的密码

        正确输入这四个参数,也可以正确运行jar包项目(我这边设置的密码是123)

Windows系统启动成功:

spring boot项目打包成jar包加密部署服务允许服务器开机自启_第10张图片

 Linux系统启动成功:   

 由此想到平常的压缩包其实也是可以设置密码的,点击查看和解压都需要输入密码才可以,那么这两者有何区别?我能否将jar包也设置成这样添加一个密码,当打开查看和运行时候让输入密码,其实也是可以达成我们想要加密jar包不外泄的目的的。

使用winsw将spring boot项目部署成服务器系统级服务运行开机自启

        虽然我们可以将服务在后台不挂断运行,但是难保项目现场会出现断电情况,因此需要设置服务开机自启动。

服务器是Windows系统:

        到github上下载   https://github.com/winsw/winsw/releases

        xml文件是给的示例使用文件,.exe则根据自己电脑的型号选择对应下载

spring boot项目打包成jar包加密部署服务允许服务器开机自启_第11张图片

部署服务:

 我将配置文件修改了一下,并且都改名为winsw


  webDemo
  webDemo
  一个用来测试的springboot项目
  java
  -jar D:\xjar\加密后\webdemo-0.0.1-SNAPSHOT.jar
  D:\xjar\加密后
  

spring boot项目打包成jar包加密部署服务允许服务器开机自启_第12张图片

在该目录下启动cmd窗口,输入    winsw install   即可将spring boot服务改为系统级别服务,可以在任务管理器中查看,并启停。或者使用命令行:     net start/stop webDemo

spring boot项目打包成jar包加密部署服务允许服务器开机自启_第13张图片

 spring boot项目打包成jar包加密部署服务允许服务器开机自启_第14张图片

 删除服务:

在该目录下进入cmd执行命令     winsw uninstall

spring boot项目打包成jar包加密部署服务允许服务器开机自启_第15张图片

服务器是Linux系统:

设为系统级服务:

编写启动脚本     vi startup.sh

//这边使用nohup和后面的>log.log >2&1& 我在上篇文章有解释,不清楚的同学可以去看一下
nohup ./home/admin/Demo/./xjar java -jar /home/admin/Demo/webdemo-0.0.1-SNAPSHOT.jar >/home/admin/Demo/log.log 2>&1&

执行chmod命令,给startup.sh权限,使该脚本可运行

chmod +777 /home/admin/Demo/startup.sh

编辑/etc/rc.local文件,在末尾加上该脚本路径

/home/admin/Demo/startup.sh

添加完后重启服务器,使用命令查看java服务是否开机自启

ps -ef | grep java

用postman测试服务内的接口发现可以调用

spring boot项目打包成jar包加密部署服务允许服务器开机自启_第16张图片

关闭服务:

查看并找到服务的PID:

ps -aux

关闭服务:

kill -9 服务的PID

至此,Windows和Linux两个版本部署java的jar包服务时都可以使用xjar进行加密,再将服务部署成系统级服务,开机自启。

你可能感兴趣的:(spring,jar,java)