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

  1. Wählen Sie auf der Anwendungsart-Seite Spring Boot aus.

    Spring Boot auswählen

  2. 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.

    Wählen Sie Eingabe, Java-Version, Zielplattform und Modus aus

  3. 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.

    Einstellen von fortgeschrittenen Parametern für Spring Boot

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

    Wählen Sie den Ausgabekatalog aus und führen Sie den Schutz durch

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.jar behält die standardmäßige physische Struktur von BOOT-INF bei;
  • 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-fat oder fat, empfohlen vom Scanner, verwendet.

Wie wählt man die Anordnung aus?

SzenarienEmpfohlene Anordnung
Herkömmliche Spring Boot-Dienstep4jx-fat
Die Anwendung ruft tatsächlich Scanner wie ClassGraph und Reflections auffat
Wenn ein flaches Verzeichnis für externe Abhängigkeiten erforderlich ist oder die Abhängigkeitsdateien separat verschlüsselt werden müssenseparate
UnsicherFü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+=(...) unter run.sh zusätzlich JVM_OPTS+=("-Xms1g" "-Xmx2g") hinzu.
  • Windows: Fügen Sie nach den bereits erstellten set "JVM_OPTS=..." unter run.bat zusätzlich set "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:

OptionenVerhaltenWann es verwendet wird
--compat-scanEs 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-applyNach 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.