SpringBoot jar包啟動/預防反編譯


一、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安全加密防止反編譯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM