Schutz für Tomcat-Web-Anwendungen
tomcat: Konvertiert eine WAR-Datei in eine selbstständige Tomcat-Basis. Während der Ausführung werden die im Encoder enthaltenen Tomcat-Komponenten verwendet, ohne dass die lokale Tomcat-Installation des Benutzers gelesen wird.
1. GUI-Bedienung
-
Wählen Sie auf der Anwendungsart-Seite Tomcat WAR aus.

-
Wählen Sie die Eingabedatei WAR, Die mitgelieferte Java-Version sowie die Zielplattform aus und entscheiden Sie sich zwischen Einfachmodus oder Fortgeschrittenem Modus.

-
Im Fortgeschrittenen Modus wählen Sie Tomcat 9/10.1 aus oder lassen Sie die automatische Erkennung zu, und legen Sie gegebenenfalls Context Path, JVM-Parameter sowie Ausschlussregeln fest; im Einfachmodus wird auf der Grundlage einer Kompatibilitätsprüfung eine Tomcat-Version 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
Specifizierter Context Path:
p4j tomcat app.war dist --context /app
Kompatibilitätsprüfung sowie automatische Anwendungsempfehlungen:
p4j tomcat app.war --compat-scan
p4j tomcat app.war dist --compat-apply --context /app
Diese beiden Optionen können nicht gleichzeitig verwendet werden; der Unterschied zwischen ihnen ist:
| Option | Verhalten | Wann verwenden |
|---|---|---|
--compat-scan | Es wird nur der eingegebene WAR-Datei durchgescannt, anschließend werden Risiken sowie Konfigurationsempfehlungen ausgegeben und die Ausführung beendet; es findet weder eine Kodierung noch wird dist erzeugt, daher ist ein Ausgabeverzeichnis nicht notwendig. | Nach dem ersten Schutz der Anwendung, bei Updates der Tomcat-Abhängigkeiten, bei Anpassungen des Schutzumfangs oder der JSP-Konfiguration sowie bei der Behebung von Kompatibilitätsproblemen wird zunächst dieses Tool verwendet, um Berichte anzuzeigen. |
--compat-apply | Nach dem Scannen werden konservative Empfehlungen automatisch zusammengeführt, anschließend wird weiter kodiert und eine Ausgabe erzeugt. Daher muss der Ausgabekatalog unbedingt angegeben werden. | Wenn die Ergebnisse der Scans gelesen und die automatischen Vorschläge akzeptiert wurden, kann dies zur Abschlussverpackung verwendet werden; es eignet sich auch für wiederholte Builds mit bereits überprüften Regeln oder in CI-Prozessen. |
Für tomcat und --compat-apply können auf Basis der Scannergebnisse zusätzliche Ausnahmeklassen hinzugefügt werden, und Optionen wie die Tomcat-Version, das ZIP-overlay sowie die Archivendung können angepasst werden. Bei den letzten drei Optionen hat der aus der Kommandozeile ausdrücklich angegebene Wert Vorrang; die empfohlenen Ausnahmeklassen werden standardmäßig mit den ausdrücklich angegebenen für --exclude kombiniert. Falls keine automatische Hinzufügung von Ausnahmeklassen gewünscht ist, kann gleichzeitig --no-compat-excludes übergeben werden. Der Scanner führt lediglich eine statische heuristische Analyse durch – Probleme, die eine Codeanpassung erfordern, werden von --compat-apply nicht automatisch behoben; nach der Erstellung müssen sie weiterhin auf der Zielplattform durch Regressionstests überprüft werden.
Weitere CLI-Befehle, alle Optionen, Umgebungsvariablen und Automatisierungsbeispiele finden Sie unter Referenz für CLI-Parameter.
--tomcat-version ist standardmäßig gleich auto. Bei Bedarf kann explizit 9 oder 10.1 angegeben werden:
p4j tomcat app.war dist --context /app --tomcat-version 10.1
3. Schutzumfang: Der „Schutz“ umfasst den Schutz vor unbefugtem Zugriff sowie den Schutz der Daten innerhalb der geschützten Anwendung. Geschützte Anwendung: Eine geschützte Anwendung ist eine Anwendung, die durch spezielle Sicherheitsmaßnahmen vor externen Angriffen abgeschirmt wird. Kompatibilitätsprüfung: Vor der Verwendung ist eine Kompatibilitätsprüfung unerlässlich, um sicherzustellen, dass alle Komponenten zusammen funktionieren. Schutz: Zentraler Bestandteil des Schutzes ist die Erkennung und Abschirmung potenzieller Bedrohungen.
dist/
├── bin/
│ ├── catalina.sh
│ ├── startup.sh
│ ├── shutdown.sh
│ └── *.bat
├── conf/p4jx/
│ ├── contexts.list
│ ├── protected-classes.list
│ └── allowed-prefixes.list
├── protected/
│ └── app.p4jx
├── lib/
│ ├── p4jx-tomcat-runtime.jar
│ └── tomcat-runtime-deps.jar
├── vlxjre/
├── run.sh
└── run.bat
Standardmäßig wird kein physischer WAR erzeugt. web.xml, statische Ressourcen, öffentliche Klassen, Metadaten-Stubs sowie die Schutzimplementierungen befinden sich in protected/<context>.p4jx und werden von P4JX WebResourceSet an Tomcat bereitgestellt.
4. Starten und Beenden
Vorgrundausführung:
./run.sh
Starten im Tomcat-Stil im Hintergrund:
./bin/startup.sh
./bin/shutdown.sh
Für Windows wird die entsprechende Datei .bat verwendet. Die Protokolle werden in den Ausgabekatalog geschrieben, in der Datei logs/.
JVM-Startparameter
Beim Paketieren kann man in der GUI in JVM startup options einen Parameter pro Zeile eingeben oder die CLI verwenden:
p4j tomcat app.war dist \
--context /app \
--jvm-option -Xms1g \
--jvm-option -Xmx2g
Direkte Anpassung nach der Bereitstellung:
- macOS/Linux: Bearbeiten Sie
bin/catalina.shund fügen Sie nachJVM_OPTS=(...)inrun_java()JVM_OPTS+=("-Xms1g" "-Xmx2g")hinzu – dies wirkt sich sowohl bei Vorgrund- als auch bei Hintergrundstart unterstartup.shaus. - Windows Vorgrund: Bearbeiten Sie
bin\catalina.batund fügen Sie nach dem ursprünglichenset "JVM_OPTS=..."set "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g"hinzu. - Hintergrundbetrieb unter Windows: Fügen Sie vor dem Aufruf von
catalina.batvonbin\startup.batausset "APP_JAVA_OPTS=-Xms1g -Xmx2g"hinzu. Wenn dieselben persistenten Parameter sowohl im Hintergrund- als auch im Vordergrundbetrieb verwendet werden sollen, wird empfohlen, diese über die GUI/CLI neu zu erzeugen.
Eine vorübergehende Aktivierung ist ebenfalls möglich, indem man APP_JAVA_OPTS vor dem Befehl festlegt. Vollständige Beispiele für CMD, PowerShell und Skripte finden Sie unter Konfiguration der JVM-Startparameter.
5. Auswahl der Tomcat-Version
| WAR API-Namespace | Tomcat | Java-Anforderungen |
|---|---|---|
javax.servlet.* | Tomcat 9 | Java 8/11/17/21/25 |
jakarta.servlet.* | Tomcat 10.1 | Java 11/17/21/25 |
Die automatische Erkennung versucht in erster Linie, API-Namenräume anhand von Anwendungsarten und Deployment-Deskriptoren zu identifizieren, wobei die Namen der abhängigen JAR-Dateien lediglich als unterstützende Hinweise dienen. Wenn eine Mischung aus javax und jakarta erkannt wird, weigert sich das Tool, automatisch Rückschlüsse zu ziehen.
6. JSP
Wenn WAR-Dateien JSP-Dateien enthalten, werden sie standardmäßig automatisch in der Kompilierungsphase zu Servlet-Klassen und URL-Abbildungen vorkompiliert. Der Grund dafür ist, dass eine dynamische JSP-Kompilierung zur Laufzeit neue Klassen aus dem Arbeitsverzeichnis von Tomcat erstellt, was nicht mit dem Schutz der Grenzen der laufzeitlichen Klassendefinitionen übereinstimmt.
Explizite Steuerung möglich:
--precompile-jsp
--no-precompile-jsp
In der Produktionsumgebung wird empfohlen, die Standard-Einstellung zur automatischen Vorkompilierung beizubehalten. Wenn diese deaktiviert wird, können Anwendungen mit JSP beim Aufrufen der Seiten fehlschlagen.
7. Schutzumfang und Ausschlussregeln
Standardmäßig werden die Anwendungsklassen unter WEB-INF/classes geschützt, während WEB-INF/lib standardmäßig ungeschützt bleibt. Web-zugängliche Klassen können ausgeschlossen werden:
p4j tomcat app.war dist \
--context /app \
--exclude 'com.example.web.**,com.example.dto.**'
Insbesondere sollten servlet/filter/listener, DTOs, Konfigurationen, Entitäten, JNI-Brückenklassen sowie Klassen, die durch den Container erweitert werden müssen, ausgeschlossen werden. Die Kompatibilitätsprüfung liefert vorsichtige Empfehlungen.
8. Hinzufügen einer Anwendung in derselben Tomcat-Paketstruktur
p4j tomcat second.war dist \
--append-app \
--context /second
Einschränkungen:
- Der Context-Path darf nicht mit bereits vorhandenen Anwendungen übereinstimmen;
- Sowohl alte als auch neue Anwendungen müssen dieselbe Hauptversion von Tomcat, dieselbe Java-Version sowie dieselbe Zielplattform verwenden;
- Wenn
--append-appnicht übergeben wird, weigert sich das Tool, in bereits vorhandene Tomcat-Pakete zu schreiben; - Im GUI wird “Append application to an existing Tomcat folder” ausgewählt und direkt ein vorhandener Ordner ausgewählt.
9. Hinweise zu Java 8
Für das Java 8-Ziel wird automatisch ZIP overlay aktiviert, sodass Tomcat WebResourceSet geschützte Archivdateien öffnen kann.