Crear filtros basados en patrones serialización | Java
Los filtros basados en patrones son filtros que usted define sin cambiar el
código de su aplicación. Agrega filtros para todo el proceso en los archivos
de propiedades o filtros específicos de la aplicación en la línea de
comandos java.
Un filtro basado en patrones es una secuencia de patrones. Cada patrón se
compara con el nombre de una clase en la secuencia o con un límite de
recursos. Los patrones de límite de recursos y basados en clases se pueden
combinar en una cadena de filtro, con cada patrón separado por un punto y coma
(;).
Sintaxis de filtro basada en patrones
Cuando cree un filtro que se compone de patrones, utilice las siguientes
pautas:
- Separe los patrones con punto y coma. Por ejemplo:
pattern1.*;pattern2.*
- El espacio en blanco es significativo y se considera parte del patrón.
- Ponga los límites primero en la cadena. Se evalúan primero independientemente de dónde se encuentren en la cadena, por lo que colocarlos primero refuerza el orden. De lo contrario, los patrones se evalúan de izquierda a derecha.
- Se rechaza una clase que coincide con un patrón precedido por !. Se acepta una clase que coincide con un patrón sin !. El siguiente filtro rechaza pattern1.MyClass pero acepta pattern2.MyClass:
!pattern1.*;pattern2.*
- Utilice el símbolo comodín (*) para representar clases no especificadas en un patrón como se muestra en los siguientes ejemplos:
- Para que coincida con todas las clases, utilice *
- Para coincidir con todas las clases en mypackage, use mypackage.*
- Para hacer coincidir todas las clases mypackage y sus subpaquetes, utilice mypackage.**
- Para hacer coincidir todas las clases que comienzan con text, use text*
Si una clase no coincide con ningún filtro, se acepta. Si desea aceptar solo
ciertas clases, su filtro debe rechazar todo lo que no coincida. Para rechazar
todas las clases distintas de las especificadas, incluya !* como último patrón
en un filtro de clases.
Limitaciones de los filtros basados en patrones
Los filtros basados en patrones se utilizan para una simple aceptación o
rechazo. Estos filtros tienen algunas limitaciones. Por ejemplo:
- Los patrones no pueden permitir diferentes tamaños de matrices según la clase.
- Los patrones no pueden coincidir con las clases según el supertipo o las interfaces de la clase.
- Los patrones no tienen estado y no pueden tomar decisiones en función de las clases anteriores de-serializadas en la secuencia.
Definir un filtro basado en patrones para una aplicación
Puede definir un filtro basado en patrones como propiedad del sistema para
una aplicación. Una propiedad del sistema reemplaza un valor de propiedad
de seguridad.
Para crear un filtro que solo se aplique a una aplicación, y solo a una
única invocación de Java, defina la propiedad jdk.serialFilter del sistema
en la línea de comandos.
El siguiente ejemplo muestra cómo limitar el uso de recursos para una
aplicación individual:
java -Djdk.serialFilter=maxarray=100000;maxdepth=20;maxrefs=500 com.example.test.Application
Definir un filtro basado en patrones para todas las aplicaciones de un proceso
Puede definir un filtro basado en patrones como propiedad de seguridad para
todas las aplicaciones de un proceso. Una propiedad del sistema reemplaza un
valor de propiedad de seguridad.
- Edite el archivo java.security de propiedades.
- JDK 9 y posterior: $JAVA_HOME/conf/security/java.security
- JDK 8,7,6: $JAVA_HOME/lib/security/java.security
-
Agregue el patrón a la propiedad jdk.serialFilter de seguridad.
Definir un filtro de clase
Puede crear un filtro de clase basado en patrones que se aplique
globalmente. Por ejemplo, el patrón puede ser un nombre de clase o un
paquete con comodines.
En el siguiente ejemplo, el filtro rechaza una clase de un paquete
(!example.somepackage.SomeClass) y acepta todas las demás clases del
paquete:
jdk.serialFilter=!example.somepackage.SomeClass;example.somepackage.*;
El filtro de ejemplo anterior acepta todas las demás clases, no solo las de
example.somepackage.*. Para rechazar todas las demás clases, agregue !*:
jdk.serialFilter=!example.somepackage.SomeClass;example.somepackage.*;!*
Definir un filtro de límite de recursos
Un filtro de recursos limita la complejidad y el tamaño del gráfico. Puede crear filtros para los siguientes parámetros para controlar el uso de recursos para cada aplicación:
- Tamaño de matriz máximo permitido. Por ejemplo: maxarray=100000;
- Profundidad máxima de un gráfico. Por ejemplo: maxdepth=20;
- Máximas referencias en un gráfico entre objetos. Por ejemplo: maxrefs=500;
- Número máximo de bytes en una secuencia. Por ejemplo: maxbytes=500000;
Comentarios
Publicar un comentario