SpringBoot jar包启动/预防反编译

时间:2024-02-20 17:06:59

一、spring-boot-maven-plugin插件

  1. 作用:能够将SpringBoot应用打包为可执行的jar或war文件,进行相应部署后即可启动SpringBoot应用;

  2. 构建目标

    A. spring-boot:run ——> 运行SpringBoot应用;

    B. spring-boot:repackage ——> 将mvn package生成的jar或者war重新打包成可执行文件,同时修改原文件名,增加.origin后缀;

 

二、Linux环境下jar包启动

  1. 启动命令

    命令行:nohup java -jar xxx.jar --spring.profiles.active=dev/test/prod > catalina.out 2>&1 &

    参数解释:A. xxx.jar代表完整的jar包名;

         B. --spring.profiles.active=dev/test/prod是根据不同的环境部署值;

         C. catalina.out指输出的日志文件名;

         D. 2>&1指输出所有的日志文件;

         E. &代表后台启动,指ctrl+c不会退出程序;

  2. 停止命令

    命令行:kill -9 pid

    参数解释:kill用于删除执行中的程序;

         9代表强制删除程序;

         pid代表进程号;

  3. 启动脚本:sh web-admin.sh

#!/bin/bash
PROJECT_PACKAGE=web-admin-0.0.1-SNAPSHOT.jar
PATH_NAME=test/web-admin/web-admin
# 删除文件
rm -rf /project/web/jar/$PROJECT_PACKAGE
# 拷贝文件
cp /var/lib/jenkins/workspace/$PATH_NAME/target/$PROJECT_PACKAGE /project/web/jar/
# 切换路径
cd /project/web/jar/

pid=`ps -ef | grep $PROJECT_PACKAGE | grep -v grep | awk \'{print $2}\'`
if [ -n "$pid" ]
then
   # 杀死存在进程
   kill -9 $pid
fi

# 避免项目启动之后被Jenkins杀掉
BUILD_ID=dontKillMe
# 执行
nohup java -jar $PROJECT_PACKAGE --spring.profiles.active=test >> /project/web/log/web-admin.log 2>&1 &
# echo 命令用于向窗口输出文本
echo "web-admin项目启动成功!"

   4. JVM参数

    A. 开启远程调试:-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=28080,suspend=n   这些参数要放在java -jar中间

      -Xdebug:启用调试;

      -Xrunjdwp:加载JVM的JPDA参考实现库;

      server:Xrunjdwp参数(作为调试服务器运行);

      transport:Xrunjdwp参数(建立socket链接);

      address:Xrunjdwp参数(在28080端口监听Socket连接);

      suspend:Xrunjdwp参数(是否在调试客户端建立连接之后启动 VM)。

 

三、预防反编译

  1. 使用ProGuard插件实现代码混淆

  2. 使用xJar安全加密

    A. 手动加密

    B. maven插件加密

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <!-- 加密jar包,防止反编译 -->
        <plugin>
            <groupId>com.github.core-lib</groupId>
            <artifactId>xjar-maven-plugin</artifactId>
            <version>4.0.2</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>build</goal>
                    </goals>
                    <configuration>
                        <!-- 需要加密的资源路径表达式 -->
                        <includes>         
                            <include>com/ruhuanxingyun/dcy/**</include>
                            <include>config/*</include>
                            <include>mapper/**</include>
                            <include>sh/*</include>
                            <include>sql/*</include>
                        </includes>
                        <targetJar>${project.build.finalName}.x.jar</targetJar>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<!-- 配置插件仓库 -->
<pluginRepositories>
<pluginRepository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</pluginRepository>
</pluginRepositories>

    C. 编译脚本:go build xjar.go,在Linux下得到xjar可执行文件,注意执行chmod 755 xjar,否则报运行权限不够;

    D. 打包:mvn clean install -Dxjar.password=io.xjar;

    E. Linux启动:nohup ./xjar java -jar xxx.x.jar --spring.profiles.active=dev/test/prod > catalina.out 2>&1 &;

 

可参考:SpringBoot Maven插件官网文档

    SpringBoot使用ProGuard插件实现代码混淆

    SpringBoot使用xJar安全加密防止反编译