Schutz für Spring Boot-Anwendungen
springboot dient zum Schutz von Spring Boot-Anwendungen und kann BOOT-INF/classes, BOOT-INF/lib, den Spring Boot Loader sowie den Framework-Scan verarbeiten.
1. GUI-Bedienung
-
Wählen Sie auf der Anwendungsart-Seite Spring Boot aus.

-
Wählen Sie die zu schützende Spring Boot-Anwendung, Die mitgelieferte Java-Version sowie die Zielplattform aus und entscheiden Sie sich zwischen Einfachmodus oder Fortgeschrittenem Modus.

-
Im Fortgeschrittenen Modus können Sie nach Bedarf das Ausgabemuster, geschützte Abhängigkeits-JARs, JavaFX, JVM-Parameter sowie Ausschlussregeln auswählen; im Einfachmodus werden Muster und Ausschlüsse automatisch auf Basis des Kompatibilitätsscans vorgeschlagen. Die Bedeutung der einzelnen Optionen finden Sie bei Einstellungen für den Fortgeschrittenen-Modus von Protector4J.

-
Wählen Sie den Ausgabekatalog aus, überprüfen Sie den Parameterzusammenfassung und klicken Sie anschließend auf Run protection.

2. CLI-Beispiele
Mindestkommando:
p4j springboot app.jar dist
Standardmäßig wird die Layout-Struktur p4jx-fat verwendet. Explizite Auswahl eines anderen Layouts:
p4j springboot app.jar dist --layout fat
p4j springboot app.jar dist --layout separate
Selektiver Schutz:
p4j springboot app.jar dist \
--protect 'com.example.service.impl.**' \
--exclude 'com.example.dto.**,com.example.config.**'
3. Ausgabestruktur und Layout
p4jx-fat: Standard, Archivierung einer einzelnen geschützten Anwendung
dist/
├── app.p4jx # Bei Verwendung des Suffixes jar wird app.jar verwendet
├── vlxjre/
├── run.sh
├── run.command
└── run.bat
Eigenschaften:
- Liefert eine Archivierung in Form einer einzelnen P4JX-Anwendung;
- Physische Dateien sind standardmäßig keine ZIP-Dateien;
- Spring Boot-Ressourcen, eingebettete Abhängigkeiten sowie Metadaten werden über eine virtuelle JAR-Ansicht bereitgestellt;
- Der Schutzumfang ist am größten und eignet sich für Anwendungen, die keine Abhängigkeiten von Drittanbieter-classpath-Scannern haben.
fat: Kompatibles Layout für Spring Boot
dist/
├── app.jar
├── app.p4jx # Bei dem Archivsuffix jar handelt es sich um app-protected.jar
├── vlxjre/
└── run.*
Eigenschaften:
app.jarbehält die standardmäßige physische Struktur vonBOOT-INFbei;- Die tatsächliche Implementierung der geschützten Klassen befindet sich im benachbarten P4JX-Archiv;
- Eignet sich für Anwendungen wie ClassGraph und Reflections, die eine Scannung der physischen Spring Boot JAR-Struktur erfordern;
- Zwischen den beiden Dateien besteht eine Verknüpfung, sie müssen gemeinsam aktualisiert und bereitgestellt werden.
separate: Getrenntes Kompatibilitätslayout
dist/
├── plain-launcher.jar
├── app.p4jx
├── lib/
├── vlxjre/
└── run.*
Eigenschaften:
- Trennung von Spring Boot Loader, öffentlichen Klassen und Abhängigkeiten;
- Eignet sich für alte Integrationsumgebungen, die einen flachen Klassensatz von
lib/*benötigen; - Schutzklassen werden vom generierten Starter vorgeladen;
- Für neue Projekte wird vorzugsweise
p4jx-fatoderfat, empfohlen vom Scanner, verwendet.
Wie wählt man die Anordnung aus?
| Szenarien | Empfohlene Anordnung |
|---|---|
| Herkömmliche Spring Boot-Dienste | p4jx-fat |
| Die Anwendung ruft tatsächlich Scanner wie ClassGraph und Reflections auf | fat |
| Wenn ein flaches Verzeichnis für externe Abhängigkeiten erforderlich ist oder die Abhängigkeitsdateien separat verschlüsselt werden müssen | separate |
| Unsicher | Führen Sie zuerst --compat-scan aus |
ZIP overlay unterstützt nur Tools, die direkt den zentralen Verzeichnisstruktur eines ZIP-Archivs lesen können, und ersetzt nicht die physische Spring Boot-Struktur, die von ClassLoader/classpath-Scannern benötigt wird.
4. Starten
./run.sh --spring.profiles.active=prod
Windows:
run.bat --spring.profiles.active=prod
Verwenden Sie nicht das System-JRE anstelle von vlxjre im Ausgabeverzeichnis.
Beim Verpacken für Windows kann außerdem ein natives Startprogramm erzeugt werden; alle drei Layouts werden unterstützt und können neben den Startskripten verwendet werden, siehe Erstellung eines Windows EXE-Starters.
JVM-Startparameter
Während des Verpackens können JVM-Parameter über die GUI unter JVM startup options (einer pro Zeile) oder über die CLI festgelegt werden:
p4j springboot app.jar dist \
--jvm-option -Xms1g \
--jvm-option -Xmx2g
Temporär hinzufügen beim Bereitstellen:
APP_JAVA_OPTS="-Duser.timezone=Asia/Shanghai" ./run.sh
Es ist auch möglich, das aktuelle Bereitstellungsskript direkt zu ändern:
- macOS/Linux: Fügen Sie nach den bereits erstellten
JVM_OPTS=(...)/JVM_OPTS+=(...)unterrun.shzusätzlichJVM_OPTS+=("-Xms1g" "-Xmx2g")hinzu. - Windows: Fügen Sie nach den bereits erstellten
set "JVM_OPTS=..."unterrun.batzusätzlichset "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g"hinzu.
Löschen Sie nicht die von Spring Boot oder JavaFX automatisch erzeugten internen Parameter wie --add-opens sowie den module path. Eine erneute Paketierung überschreibt manuelle Änderungen; weitere Details finden Sie in Konfiguration der JVM-Startparameter.
5. Schutzumfang
Standardmäßig werden die Anwendungsklassen unter BOOT-INF/classes geschützt. Es wird empfohlen, die folgenden spring-bezogenen Klassen als gewöhnliche Klassen beizubehalten:
@Controller,@RestController,@ControllerAdvice;@Configuration, automatische Konfigurationen sowie AOT/CGLIB-erweiterte Klassen;- Jackson DTOs, JPA Entities, Records sowie Validierungsmodelle;
- Anwendungs-Eingänge sowie Klassen, die direkt vom Framework konstruiert/vermittelt werden;
- Klassen, die eine Erweiterung durch Laufzeit-Bytecode benötigen.
Implementierung des Schutzdienstes, der über eine öffentliche Facade oder Schnittstelle zugänglich ist. Die Regeln unterstützen präzise Klassennamen sowie pkg.* und pkg.**.
6. Schutzabhängige JAR-Dateien
--protect-lib kann passende BOOT-INF/lib-Abhängigkeiten schützen; alle drei Layouts werden unterstützt:
p4j springboot app.jar dist \
--protect-lib 'company-core-*.jar,pricing-*.jar'
Schützt ausschließlich eigene, nicht-offene Abhängigkeiten. Verschlüsseln Sie keine Pakete von Drittanbieter-Frameworks wie Spring, Tomcat, Logging-Tools oder Datenbank-Treiber für “Mehr Schutz”.
7. Kompatibilitätsprüfung
p4j springboot app.jar --compat-scan
p4j springboot app.jar dist --compat-apply
Diese beiden Optionen können nicht gleichzeitig verwendet werden; der Unterschied zwischen ihnen ist:
| Optionen | Verhalten | Wann es verwendet wird |
|---|---|---|
--compat-scan | Es scannt nur die eingehende JAR-Datei, gibt die Risiken sowie Konfigurationsempfehlungen aus und beendet sich anschließend; es kodiert nicht und erzeugt auch keinen dist, weshalb ein Ausgabeverzeichnis nicht erforderlich ist. | Nach dem ersten Schutz der Anwendung, bei einem Upgrade von Spring Boot oder anderen Abhängigkeiten, bei Anpassungen des Schutzumfangs oder der Struktur sowie bei der Behebung von Kompatibilitätsproblemen wird zunächst dieses Tool verwendet, um Berichte anzusehen. |
--compat-apply | Nach dem Scannen werden konservative Empfehlungen automatisch zusammengeführt, anschließend wird weiter kodiert und die Ausgabe erzeugt; daher muss unbedingt ein Ausgabeverzeichnis angegeben werden. | Wenn die Scanergebnisse gelesen und die automatischen Empfehlungen akzeptiert wurden, wird dieses Tool zum Abschluss des Paketierens verwendet; es kann auch bei wiederholten Builds mit bereits überprüften Regeln oder in CI-Prozessen eingesetzt werden. |
Für springboot und --compat-apply können je nach Scanergebnissen die Struktur ausgewählt, Ausnahmeklassen hinzugefügt sowie Optionen wie ZIP-overlay, JavaFX und Archivsuffix angepasst werden. Für diese Optionen außerhalb der Ausnahmeklassen haben die explizit in der Kommandozeile angegebenen Werte Vorrang; die empfohlenen Ausnahmeklassen werden standardmäßig mit dem expliziten --exclude zusammengeführt. Falls keine automatische Hinzufügung von Ausnahmeklassen gewünscht ist, kann gleichzeitig --no-compat-excludes übergeben werden. Der Scanner führt nur eine statische heuristische Analyse durch; Probleme, die eine Codeänderung erfordern, werden nicht automatisch von --compat-apply behoben, und nach der Erstellung müssen weiterhin Regressionstests auf der Zielplattform durchgeführt werden.
Weitere CLI-Befehle, alle Optionen, Umgebungsvariablen und Automatisierungsbeispiele finden Sie in Referenz für CLI-Parameter.