Protección de aplicaciones Spring Boot
springboot se utiliza para proteger aplicaciones Spring Boot y puede manejar BOOT-INF/classes, BOOT-INF/lib, Spring Boot Loader y el escaneo de frameworks.
1. Operaciones mediante GUI
-
En la página de tipo de aplicación, seleccione Spring Boot.

-
Elija la aplicación Spring Boot que desea proteger, Versión de Java incluida en el paquete y la plataforma de destino, y seleccione el modo simple o el modo avanzado.

-
Al usar el modo avanzado, seleccione según sea necesario el layout de salida, los JAR de dependencias a proteger, JavaFX, parámetros de JVM y reglas de exclusión; el modo simple sugerirá automáticamente el layout y los elementos a excluir basándose en el escaneo de compatibilidad. Para conocer el significado de cada opción, consulte Configuración del modo avanzado de Protector4J.

-
Elija la carpeta de salida, revise el resumen de parámetros y luego haga clic en Run protection.

2. Ejemplos de CLI
Comando mínimo:
p4j springboot app.jar dist
Se utiliza por defecto el layout p4jx-fat. Selección explícita de otro layout:
p4j springboot app.jar dist --layout fat
p4j springboot app.jar dist --layout separate
Protección selectiva:
p4j springboot app.jar dist \
--protect 'com.example.service.impl.**' \
--exclude 'com.example.dto.**,com.example.config.**'
3. Estructura y layout de salida
p4jx-fat: Por defecto, archivo de una sola aplicación protegida
dist/
├── app.p4jx # Cuando se utiliza el sufijo jar, se convierte en app.jar
├── vlxjre/
├── run.sh
├── run.command
└── run.bat
Características:
- Se entrega como archivo de una sola aplicación P4JX;
- Los archivos físicos, por defecto, no están en formato ZIP;
- Los recursos de Spring Boot, las dependencias anidadas y los metadatos se proporcionan a través de una vista de JAR virtual;
- Ofrece el mayor nivel de protección, adecuado para aplicaciones que no dependen de escaners de classpath de terceros.
fat: Layout compatible con Spring Boot
dist/
├── app.jar
├── app.p4jx # Cuando lleva el sufijo jar, se convierte en app-protected.jar
├── vlxjre/
└── run.*
Características:
app.jarmantiene la estructura física estándar deBOOT-INF;- La implementación real de las clases protegidas se encuentra en el archivo adjunto P4JX;
- Adecuado para aplicaciones como ClassGraph y Reflections que requieren escanear la estructura física de los JAR de Spring Boot;
- Existen relaciones de vinculación entre los dos archivos, por lo que deben actualizarse y entregarse juntos.
separate: Layout de compatibilidad separado
dist/
├── plain-launcher.jar
├── app.p4jx
├── lib/
├── vlxjre/
└── run.*
Características:
- Separación entre Spring Boot Loader, clases públicas y dependencias;
- Adecuado para entornos de integración antiguos que necesitan un classpath plano de tipo
lib/*; - Las clases protegidas se precargan mediante el cargador generado;
- Para nuevos proyectos, se debe utilizar preferentemente
p4jx-fatofat, recomendado por el escáner.
Cómo seleccionar el layout
| Escenarios | Layouts recomendados |
|---|---|
| Servicios habituales de Spring Boot | p4jx-fat |
| La aplicación llama directamente a escaners como ClassGraph y Reflections | fat |
| Cuando es necesario utilizar un directorio de dependencias externas plano o cifrar los archivos de dependencias por separado | separate |
| Incierto | Ejecutar primero --compat-scan |
ZIP overlay solo ayuda a las herramientas que leen directamente el directorio central del ZIP; no puede reemplazar la estructura física de Spring Boot necesaria para los escaners ClassLoader/classpath.
4. Iniciar
./run.sh --spring.profiles.active=prod
Windows:
run.bat --spring.profiles.active=prod
No utilice el JRE del sistema en lugar de vlxjre en el directorio de salida.
Al empacar para Windows, también se puede generar un programa de inicio nativo adicional; se admiten los tres diseños y coexisten con los scripts de inicio, véase Generar un iniciador EXE para Windows.
Parámetros de inicio de la JVM
Durante el empaquetado, los parámetros de la JVM se pueden fijar a través de JVM startup options en la GUI (uno por línea) o mediante la CLI:
p4j springboot app.jar dist \
--jvm-option -Xms1g \
--jvm-option -Xmx2g
Añadir temporalmente durante el despliegue:
APP_JAVA_OPTS="-Duser.timezone=Asia/Shanghai" ./run.sh
También se puede modificar directamente el script de despliegue actual:
- macOS/Linux: Añada
JVM_OPTS+=("-Xms1g" "-Xmx2g")después deJVM_OPTS=(...)/JVM_OPTS+=(...)que ya se generaron a partir derun.sh. - Windows: Añada
set "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g"después deset "JVM_OPTS=..."que ya se generó a partir derun.bat.
No elimine los parámetros internos generados automáticamente por Spring Boot o JavaFX, como --add-opens y el module path. Reempaquetar sobrescribirá los cambios manuales; consulte Configuración de parámetros de inicio de la JVM para más detalles.
5. Ámbito de la protección
Por defecto, se protegen las clases de aplicación en BOOT-INF/classes. Se recomienda mantener las siguientes clases orientadas a Spring como clases normales:
@Controller,@RestController,@ControllerAdvice;@Configuration, clases de configuración automática y clases mejoradas con AOT/CGLIB;- DTO de Jackson, entidades JPA, records y modelos de validación;
- Puntos de entrada de la aplicación y clases construidas o proxyeadas directamente por el framework;
- Clases que requieren mejoras en bytecode en tiempo de ejecución.
Implementación de servicios de protección, a la que se accede a través de una interfaz o facade pública. Las reglas admiten nombres de clase exactos, pkg.* y pkg.**.
6. Archivos JAR dependientes de la protección.
--protect-lib puede proteger las dependencias correspondientes BOOT-INF/lib; se admiten los tres tipos de configuración.
p4j springboot app.jar dist \
--protect-lib 'company-core-*.jar,pricing-*.jar'
Protege únicamente las dependencias propias y de código cerrado. No encripte paquetes de frameworks de terceros como Spring, Tomcat, sistemas de registro o controladores de base de datos con el fin de utilizar “Proteger aún más”.
7. Análisis de compatibilidad.
p4j springboot app.jar --compat-scan
p4j springboot app.jar dist --compat-apply
Estas dos opciones no se pueden utilizar simultáneamente; su diferencia es la siguiente:
| Opciones | Comportamiento | Cuándo usarlo |
|---|---|---|
--compat-scan | Solo escanea el JAR de entrada, imprime los riesgos y sugerencias de configuración y luego se cierra; no codifica ni genera dist, por lo que no es necesario especificar un directorio de salida. | Úsalo primero para ver los informes después de proteger una aplicación por primera vez, actualizar Spring Boot u otras dependencias, ajustar el alcance de protección o la estructura, o al resolver problemas de compatibilidad. |
--compat-apply | Después del escaneo, combina automáticamente las sugerencias conservadoras y luego continúa con la codificación y generación de la salida, por lo que es necesario especificar un directorio de salida. | Úsalo para finalizar el empaquetado una vez que se hayan leído los resultados del escaneo y se hayan aceptado las sugerencias automáticas; también se puede utilizar en construcciones repetidas con reglas ya verificadas o en flujos CI. |
Para springboot y --compat-apply, se pueden seleccionar layouts según los resultados del escaneo, agregar clases de exclusión y ajustar opciones como ZIP overlay, JavaFX y el sufijo de archivo del archivo comprimido. Para estas opciones distintas a las clases de exclusión, prevalecen los valores especificados explícitamente en la línea de comandos; las clases de exclusión sugeridas se combinan por defecto con --exclude de forma automática. Si no se desea agregar clases de exclusión automáticamente, se puede pasar también --no-compat-excludes. El escáner solo realiza un análisis de compatibilidad heurístico estático; los problemas que requieren modificar el código no serán reparados automáticamente por --compat-apply, y aún será necesario realizar pruebas de regresión en la plataforma objetivo después de la generación.
Para otras órdenes CLI, todas las opciones, variables de entorno y ejemplos de automatización, consulte Referencia de parámetros de la CLI.