Защита приложений Spring Boot
springboot предназначен для защиты приложений Spring Boot и может обрабатывать BOOT-INF/classes, BOOT-INF/lib, Spring Boot Loader и сканирование фреймворков.
1. Работа с интерфейсом GUI
-
На странице типов приложений выберите Spring Boot.

-
Выберите приложение Spring Boot, которое необходимо защитить, Входящая версия Java и целевую платформу, а затем выберите режим простой или продвинутый.

-
В режиме продвинутого использования по мере необходимости выбирайте макет вывода, JAR-файлы зависимостей для защиты, JavaFX, параметры JVM и правила исключения; в режиме простом макет и элементы исключения автоматически предлагаются на основе сканирования совместимости. Значение каждого параметра описано в Настройки режима «Продвинутый» для Protector4J.

-
Выберите каталог вывода, проверьте краткое описание параметров, а затем нажмите Run protection.

2. Примеры использования CLI
Минимальная команда:
p4j springboot app.jar dist
По умолчанию используется макет p4jx-fat. Чтобы явно выбрать другой макет:
p4j springboot app.jar dist --layout fat
p4j springboot app.jar dist --layout separate
Избирательная защита:
p4j springboot app.jar dist \
--protect 'com.example.service.impl.**' \
--exclude 'com.example.dto.**,com.example.config.**'
3. Структура и макет вывода
p4jx-fat: по умолчанию, архив с одним защищённым приложением
dist/
├── app.p4jx # При использовании суффикса jar становится app.jar
├── vlxjre/
├── run.sh
├── run.command
└── run.bat
Особенности:
- Поставляется в виде архива с одним приложением типа P4JX;
- Физические файлы по умолчанию не являются ZIP-файлами;
- Ресурсы Spring Boot, вложенные зависимости и метаданные предоставляются через виртуальную видимость JAR;
- Обеспечивает максимальный уровень защиты, подходит для приложений, не зависящих от сканеров classpath от сторонних поставщиков.
fat: компоновка, совместимая с Spring Boot
dist/
├── app.jar
├── app.p4jx # При использовании суффикса jar становится app-protected.jar
├── vlxjre/
└── run.*
Особенности:
app.jarсохраняет стандартную физическую структуруBOOT-INF;- Фактическая реализация защищаемых классов находится в соседнем архиве P4JX;
- Подходит для приложений, таких как ClassGraph и Reflections, которым необходимо сканировать физическую структуру JAR Spring Boot;
- Между двумя файлами существует связь, поэтому их необходимо обновлять и передавать вместе.
separate: Раздельная схема совместимости
dist/
├── plain-launcher.jar
├── app.p4jx
├── lib/
├── vlxjre/
└── run.*
Особенности:
- Разделение Spring Boot Loader, публичных классов и зависимостей;
- Подходит для старых сред интеграции, требующих плоского классового пути
lib/*; - Классы защиты предзагружаются сгенерированным загрузчиком;
- Для новых проектов в первую очередь используется
p4jx-fatилиfat, рекомендованный сканером.
Как выбрать схему
| Сценарии использования | Рекомендуемая конфигурация |
|---|---|
| Стандартный сервис Spring Boot | p4jx-fat |
| Практическое использование сканеров вроде ClassGraph и Reflections в приложении | fat |
| Когда необходимо использовать плоскую директорию внешних зависимостей или отдельно шифровать файлы зависимостей | separate |
| Неизвестно | Сначала выполните --compat-scan |
ZIP overlay помогает только инструментам, которые напрямую читают центральную директорию ZIP, и не может заменить физическую структуру Spring Boot, необходимую сканерам ClassLoader/classpath.
4. Запуск
./run.sh --spring.profiles.active=prod
Windows:
run.bat --spring.profiles.active=prod
Не заменяйте vlxjre, находящийся в каталоге вывода, системным JRE.
Параметры запуска JVM.
При пакетировании параметры JVM можно закрепить с помощью JVM startup options в интерфейсе GUI (по одному на строку) или через CLI:
p4j springboot app.jar dist \
--jvm-option -Xms1g \
--jvm-option -Xmx2g
Для временного добавления при развертывании:
APP_JAVA_OPTS="-Duser.timezone=Asia/Shanghai" ./run.sh
Также можно напрямую изменить текущий скрипт развертывания:
- macOS/Linux: Добавьте
JVM_OPTS+=("-Xms1g" "-Xmx2g")после уже сгенерированныхJVM_OPTS=(...)/JVM_OPTS+=(...)вrun.sh. - Windows: Добавьте
set "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g"после уже сгенерированныхset "JVM_OPTS=..."вrun.bat.
Не удаляйте внутренние параметры, автоматически сгенерированные Spring Boot или JavaFX, такие как --add-opens и module path. Перепакетирование перезапишет ручные изменения; подробности см. в Настройка параметров запуска JVM.
5. Область защиты
По умолчанию осуществляется защита классов приложения BOOT-INF/classes. Рекомендуется оставить следующие классы, ориентированные на Spring, в качестве обычных классов:
@Controller,@RestController,@ControllerAdvice;- Классы
@Configuration, автоматическая настройка, классы с улучшениями AOT/CGLIB; - Jackson DTO, JPA Entity, record и модели валидации;
- Входные точки приложения и классы, создаваемые/проксируемые напрямую фреймворком;
- Классы, требующие улучшений байт-кода во время выполнения.
Реализация защищаемых сервисов, доступ к которым осуществляется через публичный фасад или интерфейс. Правила поддерживают точные имена классов, pkg.* и pkg.**.
6. Зависимости JAR, требующие защиты
--protect-lib обеспечивает «защиту» соответствующих зависимостей BOOT-INF/lib; поддерживается во всех трёх конфигурациях:
p4j springboot app.jar dist \
--protect-lib 'company-core-*.jar,pricing-*.jar'
Обеспечивает «защиту» только собственных закрытых по коду зависимостей. Не следует шифровать пакеты сторонних фреймворков, таких как Spring, Tomcat, инструменты для логирования и драйверы баз данных, ради “Защита большего количества элементов”.
7. Проверка совместимости
p4j springboot app.jar --compat-scan
p4j springboot app.jar dist --compat-apply
Эти два варианта нельзя использовать одновременно; их различия заключаются в следующем:
| Параметры | Поведение | Когда использовать |
|---|---|---|
--compat-scan | Производится сканирование только введённого JAR-файла; после вывода информации о рисках и рекомендаций по настройкам процесс завершается; не происходит кодирование и не генерируется dist, поэтому выходной каталог не требуется. | Используйте его для просмотра отчёта после первой защиты приложения, обновления Spring Boot или других зависимостей, изменения области защиты или её макета, а также при устранении проблем совместимости. |
--compat-apply | После сканирования автоматически объединяются консервативные рекомендации, после чего продолжается кодирование и генерация результата; поэтому необходимо указать каталог вывода. | Используйте его для завершения пакетирования после просмотра результатов сканирования и принятия автоматических рекомендаций; его также можно применять при повторной сборке с уже проверенными правилами или в процессах CI. |
Для springboot и --compat-apply можно на основе результатов сканирования выбирать макет, добавлять классы исключения, а также настраивать такие параметры, как ZIP overlay, JavaFX и суффиксы архивов. Для этих параметров, кроме классов исключения, имеют приоритет значения, явно указанные в командной строке; рекомендуемые классы исключения по умолчанию объединяются с явно указанными в --exclude. Если не хотите, чтобы классы исключения добавлялись автоматически, можно передать также --no-compat-excludes. Сканер выполняет только статический эвристический анализ; проблемы, требующие изменения кода, не будут автоматически исправлены --compat-apply, и после генерации всё равно необходимо провести тестирование на целевой платформе.
Для сведений о других командах CLI, всех параметрах, переменных среды и примерах автоматизации см. Справка по параметрам CLI.