保护 Spring Boot 应用程序

入门视频

▶️ YouTube

▶️ Bilibili

下载

访问 https://protector4j.com/download 下载最新版本

安装

Windows 和 Linux

无需特殊安装步骤,只需下载压缩包并解压即可。

macOS

下载 dmg 文件,将 Protector4J 拖动到 Applications。该工具的实际内容位于 /Applications/Protector4J.app/Contents/protector4j-mac

使用 GUI 工具加密 Spring Boot 应用程序

进入 Protector4J 文件夹,执行 p4j-ui[.exe],您将看到如下用户界面。

macOS 用户只需像普通 Mac 应用程序一样双击 Protector4J.app 即可。

登录

如果您已购买许可证,请点击右上角的登录按钮并输入您的用户信息。如果没有许可证,您仍然可以试用此工具。

选择应用类型

在应用类型页面点击 "Spring Boot Application" 按钮。

选择需要加密的 jar/war 文件

选择您要加密的 jar/war 文件,可以选择一个或多个文件

选项

仅加密 jar 文件

仅加密 jar 文件,不部署完整的 JRE。此选项通常与 KeySeed 功能结合使用来更新现有程序。

创建可执行文件

为启动应用程序创建可执行文件,请不要添加 .exe 扩展名。

隐藏控制台

此选项仅对 Windows 上的 GUI 程序有效,用于在程序运行时隐藏命令行窗口。

JVM 选项

设置 JVM 选项,如 -Xmx 和 -Xms,用空格或换行符分隔。

输出

Java 版本选择

选择 Java 版本,支持 Java 8、Java 11、Java 17 和 Java 21

创建新文件夹

默认选中,加密任务将在输出文件夹中创建名为 p4j-[task-id] 的文件,输出结果存储在此文件夹中。

包含 JavaFX

如果是 JavaFX 应用程序,请选择此选项

SWT 应用程序

如果是 SWT 应用程序,请选择此选项。

KeySeed

加密任务默认从服务器请求随机密钥进行加密。不同加密任务生成的文件不能混合使用。 如果指定了 KeySeed,相同的 KeySeed 将生成相同的加密密钥。此选项可以与前面的"仅加密 Jar 文件"选项配合使用来更新现有应用。 此选项仅对已授权用户有效。

执行加密任务

请稍等片刻,加密任务完成后,您可以在输出文件夹中看到加密应用程序的输出结果。

运行加密后的应用程序

有三种方式运行加密后的应用程序

  1. 使用 exe 文件运行

如果目标平台是 Windows,您可以使用加密任务期间生成的可执行文件运行加密后的应用程序。

  1. 使用脚本运行

如果目标平台是 Linux 或 macOS,您可以找到名为 exe-name.sh 的脚本文件来运行应用程序。

  1. 使用传统 Java 命令运行

您也可以使用 vlxjre/bin/java 手动运行程序,此命令的格式与普通 java 命令相同。

我们可以在输出目录中看到一个名为 vlxjre 的文件夹,这是我们定制的 JRE,加密的 jar 文件存储在 vlxlib 文件夹中。

vlxjre/bin/java -jar vlxlib/xxx.jar
vlxjre/bin/java -cp vlxlib/xxx.jar MainClass
vlxjre/bin/java -cp "vlxlib/*" MainClass
vlxjre/bin/java -Xms512M -Xmx1024m -cp "vlxlib/*" MainClass

Java 8 目前不支持通过 vlxjre/bin/java -jar 运行。请使用 vlxjre/bin/java -cp xx MainClass

注意事项

如果此程序的目标平台是 macOS 或 Linux,但在 Windows 上构建,请在目标平台上执行 add-executable-permission.sh 以授予程序执行权限。

修改 exe 文件的 JVM 参数

Windows

如果需要修改 exe 文件的 JVM 参数,编辑 exe-name.json 并修改 JArgs 数组中的值。

"JArgs": [
  "-DParam1=value1",
  "-DParam2=value2"
]

Linux 和 macOS

只需打开脚本文件,添加或修改 JVM 参数即可。

使用 CLI 工具加密 Spring Boot 应用程序

配置文件

CLI 工具需要指定任务文件作为参数。

进入 protector4j/task-templates 文件夹,找到 spring-boot-task.yml,复制并修改。

# 可用值: 8,11,17,21
javaVersion: 17

# Spring Boot 应用程序的 jar 文件
springBootJarFile: ''
# 仅加密 jar 文件,不部署运行时
# 升级现有应用程序时使用此选项
onlyEncryptJarFiles: false

## [ 可执行文件信息 ]
# 可执行文件名称
exeFileName: ''
# 隐藏命令行窗口,仅对 Windows 有效
hideConsole: false
# 启动画面图片
splash: ''
# JVM 选项
jvmOptions: []

## [ 输出选项 ]
# 输出文件夹
outputFolder: ''
# 为应用程序创建新的唯一文件夹,文件夹名类似 p4j-<taskId>
createNewFolder: true
# 是否为 JavaFX 应用程序
includeJavaFX: false
# 是否为 SWT GUI 应用程序
swtApplication: false
# 固定密钥种子,仅对已授权用户有效
# 使用相同密钥种子加密的 jar 可以混合使用
keySeed: ''
# 目标平台,留空表示当前平台
# 可用值: [win, linux, mac]
platforms: []

## [ Windows exe 文件信息(可选,仅对 Windows 有效)]
icon: ''
productName: ''
productVersion: ''
fileVersion: ''
fileDescription: ''
companyName: ''
legalCopyright: ''

执行加密任务

进入 Protector4J 文件夹,执行以下命令。

Linux 或 macOS

macOS 用户可以在 /Applictions/Protector4J.app/Contents/protector4j-mac 找到 CLI 工具。

./p4j -t spring-boot -f path-of-task-file

Windows

p4j -t spring-boot -f path-of-task-file

执行 p4j --help 查看详细参数。

使用账号信息运行

./p4j -t spring-boot -f path-of-task-file -u email -p password

查看结果

加密任务完成后,请前往输出文件夹查看结果。

运行加密后的应用程序

有三种方式运行加密后的应用程序

  1. 使用 exe 文件运行

如果目标平台是 Windows,您可以使用加密任务生成的可执行文件运行加密后的应用程序。

  1. 使用脚本运行

如果目标平台是 Linux 或 macOS,您可以找到名为 exe-name.sh 的脚本文件来运行应用程序。

  1. 使用传统 Java 命令运行

您也可以使用 vlxjre/bin/java 手动运行程序,此命令的格式与普通 java 命令相同。

我们可以在输出目录中看到一个名为 vlxjre 的文件夹,这是我们定制的 JRE,加密的 jar 文件存储在 vlxlib 文件夹中。

vlxjre/bin/java -jar vlxlib/xxx.jar
vlxjre/bin/java -cp vlxlib/xxx.jar MainClass
vlxjre/bin/java -cp "vlxlib/*" MainClass
vlxjre/bin/java -Xms512M -Xmx1024m -cp "vlxlib/*" MainClass

Java 8 目前不支持通过 vlxjre/bin/java -jar 运行。请使用 vlxjre/bin/java -cp xx MainClass

注意事项

如果此程序的目标平台是 macOS 或 Linux,但在 Windows 上构建,请在目标平台上执行 add-executable-permission.sh 以授予程序执行权限。