Protection des applications Spring Boot
springboot sert à protéger les applications Spring Boot et peut gérer BOOT-INF/classes, BOOT-INF/lib, le Spring Boot Loader ainsi que le balayage des frameworks.
1. Opérations via l’interface graphique
-
Sélectionnez Spring Boot sur la page du type d’application.

-
Choisissez l’application Spring Boot à protéger, Version Java incluse et la plateforme cible, puis sélectionnez le mode simple ou le mode avancé.

-
Avec le mode avancé, sélectionnez selon vos besoins le layout de sortie, les JAR de dépendances à protéger, JavaFX, les paramètres JVM et les règles d’exclusion; le mode simple propose automatiquement des layouts et des éléments à exclure en fonction du balayage de compatibilité. La signification de chaque option est indiquée dans Paramètres du mode avancé de Protector4J.

-
Sélectionnez le répertoire de sortie, vérifiez le résumé des paramètres, puis cliquez sur Run protection.

2. Exemples en CLI
Commande minimale:
p4j springboot app.jar dist
Le layout p4jx-fat est utilisé par défaut. Sélectionner explicitement un autre layout:
p4j springboot app.jar dist --layout fat
p4j springboot app.jar dist --layout separate
Protection sélective:
p4j springboot app.jar dist \
--protect 'com.example.service.impl.**' \
--exclude 'com.example.dto.**,com.example.config.**'
3. Structure et layout de sortie
p4jx-fat : par défaut, archive d’une seule application protégée
dist/
├── app.p4jx # Devient app.jar lors de l’utilisation du suffixe jar
├── vlxjre/
├── run.sh
├── run.command
└── run.bat
Caractéristiques:
- Livré sous forme d’archive d’une seule application P4JX;
- Les fichiers physiques ne sont pas par défaut au format ZIP;
- Les ressources Spring Boot, les dépendances imbriquées et les métadonnées sont fournies via une vue JAR virtuelle;
- Il offre le plus large niveau de protection, idéal pour les applications qui ne dépendent pas d’outils de scan de classpath tiers.
fat : configuration compatible avec Spring Boot
dist/
├── app.jar
├── app.p4jx # Lorsque le suffixe est jar, il devient app-protected.jar
├── vlxjre/
└── run.*
Caractéristiques:
app.jarconserve la structure physique standard deBOOT-INF;- La mise en œuvre réelle des classes protégées se trouve dans l’archive P4JX adjacente;
- Conçu pour des applications telles que ClassGraph et Reflections qui nécessitent un balayage de la structure physique des JAR Spring Boot;
- Ces deux fichiers sont liés et doivent être mis à jour et livrés ensemble.
separate : layout de compatibilité séparé
dist/
├── plain-launcher.jar
├── app.p4jx
├── lib/
├── vlxjre/
└── run.*
Caractéristiques:
- Séparation entre Spring Boot Loader, classes publiques et dépendances;
- Adapté aux anciens environnements d’intégration nécessitant un classpath plat
lib/*; - Les classes protégées sont préchargées par le chargeur généré;
- Pour les nouveaux projets, il est préférable d’utiliser
p4jx-fatoufatrecommandé par le scanneur.
Comment choisir le layout
| Scénarios | Layouts recommandés |
|---|---|
| Services Spring Boot classiques | p4jx-fat |
| L’application utilise réellement des outils de scan tels que ClassGraph et Reflections | fat |
| Lorsqu’il est nécessaire d’utiliser un répertoire de dépendances externes plat ou de chiffrer séparément les fichiers de dépendances | separate |
| Incertitude | Exécuter d’abord --compat-scan |
ZIP overlay ne sert qu’aux outils permettant de lire directement le répertoire central du ZIP; il ne peut pas remplacer la structure physique Spring Boot requise par les scanners ClassLoader/classpath.
4. Démarrage
./run.sh --spring.profiles.active=prod
Windows:
run.bat --spring.profiles.active=prod
Ne remplacez pas vlxjre dans le répertoire de sortie par le JRE du système.
Lors de la compilation pour Windows, il est possible de générer en plus un programme d’exécution natif; les trois types de disposition sont pris en charge, et celui-ci coexiste avec le script de démarrage, comme indiqué dans Créer un lanceur EXE pour Windows.
Paramètres de démarrage de la JVM
Lors de la compilation, les paramètres de la JVM peuvent être fixés via JVM startup options dans l’interface graphique (un par ligne) ou par la ligne de commande:
p4j springboot app.jar dist \
--jvm-option -Xms1g \
--jvm-option -Xmx2g
Ajout temporaire lors du déploiement:
APP_JAVA_OPTS="-Duser.timezone=Asia/Shanghai" ./run.sh
Il est également possible de modifier directement le script de déploiement actuel:
- macOS/Linux: Ajoutez
JVM_OPTS+=("-Xms1g" "-Xmx2g")aprèsJVM_OPTS=(...)/JVM_OPTS+=(...)qui ont déjà été générés à partir derun.sh. - Windows: Ajoutez
set "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g"aprèsset "JVM_OPTS=..."qui a déjà été généré à partir derun.bat.
Ne supprimez pas les paramètres internes tels que --add-opens et le module path générés automatiquement par Spring Boot ou JavaFX. Un nouveau packaging écrasera les modifications manuelles; veuillez vous référer à Configuration des paramètres de démarrage de la JVM pour plus de détails.
5. Périmètre de protection
La classe d’application située sous BOOT-INF/classes est protégée par défaut. Il est recommandé de conserver les classes orientées Spring suivantes en tant que classes ordinaires:
@Controller,@RestController,@ControllerAdvice;@Configuration, les configurations automatiques, ainsi que les classes enrichies via AOT/CGLIB;- Les DTO Jackson, les entités JPA, les records et les modèles de validation;
- L’entrée de l’application et les classes directement construites ou proxyées par le framework;
- Classe nécessitant des améliorations au niveau du bytecode à l’exécution.
Mise en œuvre des services de protection, accessible via une façade ou une interface publique. Les règles prennent en charge les noms de classe exacts, ainsi que pkg.* et pkg.**.
6. JAR dépendant de la protection
--protect-lib permet de protéger les dépendances BOOT-INF/lib correspondantes; les trois configurations sont supportées.
p4j springboot app.jar dist \
--protect-lib 'company-core-*.jar,pricing-*.jar'
Seule la protection des dépendances propriétaires et fermées est assurée. Il ne faut pas chiffrer les paquets de frameworks tiers tels que Spring, Tomcat, les outils de journalisation ou les drivers de base de données pour “Protéger davantage”.
7. Vérification de compatibilité
p4j springboot app.jar --compat-scan
p4j springboot app.jar dist --compat-apply
Ces deux options ne peuvent pas être utilisées simultanément; leur différence réside dans:
| Options | Comportement | Quand l’utiliser |
|---|---|---|
--compat-scan | Il ne scanne que le JAR d’entrée, affiche les risques et des recommandations de configuration avant de se terminer; il ne code pas et ne génère pas dist, il n’est donc pas nécessaire de spécifier un répertoire de sortie. | À utiliser en premier pour consulter le rapport après avoir protégé une application pour la première fois, mis à jour Spring Boot ou d’autres dépendances, modifié le périmètre de protection ou la disposition, ou encore pour diagnostiquer des problèmes de compatibilité. |
--compat-apply | Il fusionne automatiquement les recommandations prudentes après le scan, puis continue le codage et génère la sortie; il est donc indispensable de spécifier un répertoire de sortie. | À utiliser pour finaliser l’empaquetage une fois que les résultats du scan ont été lus et que les recommandations automatiques ont été acceptées; il peut également être utilisé pour des builds répétés ou des processus CI où les règles ont déjà été vérifiées. |
Pour springboot et --compat-apply, il est possible de choisir la disposition en fonction des résultats du scan, d’ajouter des classes à exclure, ainsi que de modifier des options telles que le ZIP overlay, JavaFX et le suffixe d’archive. Pour ces options autres que les classes à exclure, les valeurs spécifiées explicitement en ligne de commande priment; les classes à exclure recommandées sont par défaut fusionnées avec --exclude. Si vous ne souhaitez pas que des classes soient ajoutées automatiquement, vous pouvez également fournir --no-compat-excludes. Le scanneur ne réalise qu’une analyse heuristique statique; les problèmes nécessitant des modifications dans le code ne seront pas automatiquement corrigés par --compat-apply, et des tests de régression sur la plateforme cible restent nécessaires après génération.
Pour connaître les autres commandes CLI, toutes les options, les variables d’environnement et les exemples d’automatisation, veuillez consulter Référence des paramètres CLI.