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

  1. En la página de tipo de aplicación, seleccione Spring Boot.

    Elegir Spring Boot

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

    Seleccione la entrada, la versión de Java, la plataforma de destino y el modo.

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

    Configurar parámetros avanzados de Spring Boot

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

    Elige la carpeta de salida y ejecuta la protección

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.jar mantiene la estructura física estándar de BOOT-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-fat o fat, recomendado por el escáner.

Cómo seleccionar el layout

EscenariosLayouts recomendados
Servicios habituales de Spring Bootp4jx-fat
La aplicación llama directamente a escaners como ClassGraph y Reflectionsfat
Cuando es necesario utilizar un directorio de dependencias externas plano o cifrar los archivos de dependencias por separadoseparate
InciertoEjecutar 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 de JVM_OPTS=(...)/JVM_OPTS+=(...) que ya se generaron a partir de run.sh.
  • Windows: Añada set "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g" después de set "JVM_OPTS=..." que ya se generó a partir de run.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:

OpcionesComportamientoCuándo usarlo
--compat-scanSolo 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-applyDespué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.