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

    Entradas populares