Spring-Boot-Anwendungen schützen
springboot schützt Spring-Boot-Anwendungen und verarbeitet dabei BOOT-INF/classes, BOOT-INF/lib, den Spring Boot Loader und den Framework-Scan.
1. Vorgehen in der GUI
-
Wählen Sie auf der Seite „Anwendungstyp“ die Option Spring Boot.

-
Wählen Sie die zu schützende Spring-Boot-Anwendung, die mitgelieferte Java-Version und die Zielplattformen und entscheiden Sie sich für den einfachen oder den erweiterten Modus.

-
Im erweiterten Modus wählen Sie Ausgabelayout, zu schützende Abhängigkeits-JARs, JavaFX-Einstellungen, JVM-Startoptionen und Ausschlussregeln. Der einfache Modus leitet Layout und Ausschlüsse aus dem Kompatibilitätsscan ab. Was die einzelnen Optionen bewirken, steht unter Protector4J Erweiterte Moduseinstellungen.

-
Wählen Sie das Ausgabeverzeichnis, prüfen Sie die Zusammenfassung und klicken Sie auf Schutz ausführen.

2. CLI-Beispiele
Die kürzeste Form:
p4j springboot app.jar dist
Standardmäßig kommt das Layout p4jx-fat zum Einsatz. Um ausdrücklich ein anderes zu wählen:
p4j springboot app.jar dist --layout fat
p4j springboot app.jar dist --layout separate
Nur einen Teil der Anwendung schützen:
p4j springboot app.jar dist \
--protect 'com.example.service.impl.**' \
--exclude 'com.example.dto.**,com.example.config.**'
3. Ausgabestruktur und Layouts
p4jx-fat: Standard, ein einzelnes geschütztes Archiv
dist/
├── app.p4jx # mit dem Archivsuffix jar wird daraus app.jar
├── vlxjre/
├── run.sh
├── run.command
└── run.bat
Merkmale:
- Die gesamte Anwendung wird als ein P4JX-Archiv ausgeliefert.
- Die physische Datei ist standardmäßig kein ZIP.
- Spring-Boot-Ressourcen, verschachtelte Abhängigkeiten und Metadaten werden über eine virtuelle JAR-Sicht bereitgestellt.
- Der Schutzumfang ist am größten; geeignet für Anwendungen, die nicht auf Klassenpfad-Scanner Dritter angewiesen sind.
fat: Spring-Boot-Kompatibilitätslayout
dist/
├── app.jar
├── app.p4jx # mit dem Suffix jar wird daraus app-protected.jar
├── vlxjre/
└── run.*
Merkmale:
app.jarbehält die standardmäßige physischeBOOT-INF-Struktur.- Die echten Implementierungen der geschützten Klassen liegen im P4JX-Archiv daneben.
- Geeignet für Anwendungen, die die physische Spring-Boot-JAR-Struktur durchsuchen müssen, etwa mit ClassGraph oder Reflections.
- Die beiden Dateien hängen voneinander ab und müssen gemeinsam aktualisiert und ausgeliefert werden.
separate: aufgeteiltes Kompatibilitätslayout
dist/
├── plain-launcher.jar
├── app.p4jx
├── lib/
├── vlxjre/
└── run.*
Merkmale:
- Spring Boot Loader, ungeschützte Klassen und Abhängigkeiten liegen getrennt.
- Geeignet für ältere Integrationsumgebungen, die einen flachen
lib/*-Klassenpfad verlangen. - Der erzeugte Starter lädt die geschützten Klassen vorab.
- Neue Projekte sollten
p4jx-fatbevorzugen oder das vom Scanner empfohlenep4jx-fatbzw.fat.
Layout auswählen
| Situation | Empfohlenes Layout |
|---|---|
| Ein gewöhnlicher Spring-Boot-Dienst | p4jx-fat |
| Die Anwendung nutzt tatsächlich einen Scanner wie ClassGraph oder Reflections | fat |
| Ein flaches Verzeichnis externer Abhängigkeiten oder separat verschlüsselte Abhängigkeitsdateien sind nötig | separate |
| Unklar | Zuerst --compat-scan ausführen |
Das ZIP-Overlay hilft nur Werkzeugen, die das ZIP-Zentralverzeichnis direkt lesen. Es ersetzt nicht die physische Spring-Boot-Struktur, die ClassLoader und Klassenpfad-Scanner benötigen.
4. Starten
./run.sh --spring.profiles.active=prod
Windows:
run.bat --spring.profiles.active=prod
Ersetzen Sie das Verzeichnis vlxjre in der Ausgabe nicht durch eine System-JRE.
Für Windows-Ziele lässt sich zusätzlich ein nativer Starter erzeugen. Er funktioniert mit allen drei Layouts und besteht neben den Startskripten — siehe Windows-EXE-Starter erzeugen.
JVM-Startoptionen
Sie können JVM-Optionen beim Paketieren festschreiben, entweder in der GUI unter JVM-Startoptionen mit einer Option pro Zeile oder auf der Kommandozeile:
p4j springboot app.jar dist \
--jvm-option -Xms1g \
--jvm-option -Xmx2g
Um einem ausgelieferten Paket einmalig Optionen mitzugeben:
APP_JAVA_OPTS="-Duser.timezone=Europe/Berlin" ./run.sh
Sie können das ausgelieferte Skript auch direkt bearbeiten:
- macOS und Linux: Ergänzen Sie in
run.shnach den erzeugten ZeilenJVM_OPTS=(...)undJVM_OPTS+=(...)die ZeileJVM_OPTS+=("-Xms1g" "-Xmx2g"). - Windows: Ergänzen Sie in
run.batnach der erzeugten Zeileset "JVM_OPTS=..."die Zeileset "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g".
Entfernen Sie nicht die Optionen, die der Packager für Spring Boot oder JavaFX erzeugt hat, etwa --add-opens und den Modulpfad. Erneutes Paketieren überschreibt alle manuellen Änderungen — Einzelheiten unter JVM-Startoptionen.
5. Schutzumfang
Standardmäßig werden die Anwendungsklassen unter BOOT-INF/classes geschützt. Diese Spring-nahen Klassen bleiben besser ungeschützt:
@Controller-,@RestController- und@ControllerAdvice-Klassen;@Configuration-Klassen, Autokonfigurationsklassen sowie durch AOT oder CGLIB erweiterte Klassen;- Jackson-DTOs, JPA-Entitäten, Records und Validierungsmodelle;
- der Einstiegspunkt der Anwendung sowie alle Klassen, die das Framework direkt erzeugt oder proxied;
- Klassen, die zur Laufzeit eine Bytecode-Erweiterung benötigen.
Schützen Sie die Service-Implementierungen und greifen Sie über eine öffentliche Fassade oder Schnittstelle darauf zu. Regeln akzeptieren exakte Klassennamen sowie pkg.* und pkg.**.
6. Abhängigkeits-JARs schützen
--protect-lib schützt die passenden Abhängigkeiten in BOOT-INF/lib und funktioniert mit allen drei Layouts.
p4j springboot app.jar dist \
--protect-lib 'company-core-*.jar,pricing-*.jar'
Schützen Sie ausschließlich Ihre eigenen Closed-Source-Abhängigkeiten. Verschlüsseln Sie keine Framework-Pakete von Dritten wie Spring, Tomcat, Logging-Bibliotheken oder Datenbanktreiber, nur um „mehr zu schützen“.
7. Kompatibilitätsscan
p4j springboot app.jar --compat-scan
p4j springboot app.jar dist --compat-apply
Die beiden Optionen lassen sich nicht gemeinsam verwenden. Sie unterscheiden sich so:
| Option | Wirkung | Wann sinnvoll |
|---|---|---|
--compat-scan | Untersucht das Eingabe-JAR, gibt Risiken und Konfigurationsempfehlungen aus und endet. Es wird nichts encodiert und kein dist erzeugt, daher ist kein Ausgabeverzeichnis nötig. | Lesen Sie den Bericht zuerst beim erstmaligen Schutz, nach einem Update von Spring Boot oder anderen Abhängigkeiten, nach Änderungen an Schutzumfang oder Layout und bei der Suche nach Kompatibilitätsproblemen. |
--compat-apply | Scannt, übernimmt die konservativen Empfehlungen und encodiert anschließend die Ausgabe. Daher ist ein Ausgabeverzeichnis erforderlich. | Zum Abschließen der Paketierung, wenn Sie das Scanergebnis gelesen und die Empfehlungen akzeptiert haben. Eignet sich auch für wiederholte Builds und CI-Pipelines mit bereits geprüften Regeln. |
Bei springboot kann --compat-apply das Layout wählen, Ausschlussregeln ergänzen und ZIP-Overlay, JavaFX sowie Archivsuffix anpassen. Für alles außer den Ausschlüssen hat ein auf der Kommandozeile ausdrücklich gesetzter Wert Vorrang. Empfohlene Ausschlüsse werden standardmäßig mit Ihren eigenen --exclude-Mustern zusammengeführt; geben Sie zusätzlich --no-compat-excludes an, wenn Sie das nicht möchten. Der Scanner führt nur eine statische heuristische Analyse durch. Probleme, die eine Quelltextänderung erfordern, behebt --compat-apply nicht, und die paketierte Anwendung braucht weiterhin Regressionstests auf der Zielplattform.
Die übrigen CLI-Befehle, alle Optionen, Umgebungsvariablen und Automatisierungsbeispiele finden Sie in der CLI-Referenz.