El servicio de imágenes admite un mecanismo de preprocesamiento de solicitud simple que se basa en reglas de coincidencia y sustitución de expresión regular.
Colecciones de reglas de preprocesamiento (conjuntos de reglas) se puede adjuntar a los catálogos de imágenes o al catálogo predeterminado. Las reglas del catálogo predeterminado solo se aplican si la solicitud no identifica un catálogo de imágenes principal específico.
Las reglas de preprocesamiento de solicitudes pueden modificar las partes de la ruta y la consulta de las solicitudes antes de que las procese el Platform ServerAnalizador de, incluida la manipulación de la ruta de acceso, la adición de comandos, el cambio de valores de comandos y la aplicación de plantillas o macros. Las reglas también se pueden utilizar para configurar y anular ciertas funciones de seguridad que normalmente solo se controlan con atributos de catálogo, como la ofuscación de solicitudes, la marca de agua y la limitación del servicio a direcciones IP de cliente específicas.
Los conjuntos de reglas se almacenan como archivos de documento XML. La ruta relativa o absoluta del archivo del conjunto de reglas debe especificarse en attribute::RuleSetFile
.
<?xml version="1.0" encoding="UTF-8"?>
<ruleset>
<rule>
<expression>
<varname>
expression
</varname></expression>
<substitution>
<varname>
substitution
</varname></substitution>
<addressfilter>
<varname>
addressFilter
</varname></addressfilter>
<header>
<varname>
headerValue
</varname></header>
</rule>
</ruleset>
El <?xml>
y <ruleset>
Los elementos siempre son necesarios en un archivo XML de conjunto de reglas válido, incluso si no se han definido reglas reales.
Uno <ruleset>
elemento que contiene cualquier número de <rule>
están permitidos.
El contenido de los archivos de reglas de preprocesamiento distingue entre mayúsculas y minúsculas.
Una copia de RuleSet.xsd se proporciona en la carpeta de catálogo y debe utilizarse para validar un archivo de conjunto de reglas antes de registrarlo en la catalog.ini archivo. Tenga en cuenta que el servicio de imágenes utiliza una copia interna de RuleSet.xsd para su validación.
Antes de cualquier otro procesamiento, se analiza parcialmente una solicitud HTTP entrante para determinar qué catálogo de imágenes se debe aplicar. Una vez identificado el catálogo, se aplica el conjunto de reglas del catálogo seleccionado (o el catálogo predeterminado, si no se ha identificado ningún catálogo específico).
El <rule>
Los elementos de se buscan en el orden especificado para una coincidencia con el contenido del <expression>
element ( expression
).
Si un <rule>
coincide, la variable opcional substitution
y la cadena de solicitud modificada se pasa al analizador de solicitudes del servidor para su procesamiento normal.
Si no se establece una coincidencia correcta al finalizar el <ruleset>
se alcanza, la solicitud se pasa al analizador sin realizar modificaciones.
El comportamiento predeterminado se puede modificar con la variable OnMatch
atributo del <rule>
Elemento. OnMatch
se puede establecer en break
(valor predeterminado), continue
, o error
.
Elemento y atributo | Comportamiento cuando se produce una coincidencia |
---|---|
<rule OnMatch="break"> |
El procesamiento de reglas finaliza inmediatamente después de aplicar la sustitución de esta regla. Predeterminado. |
<rule OnMatch="continue"> |
La sustitución se aplica y el procesamiento continúa con la siguiente regla. |
<rule OnMatch="error"> |
El procesamiento de reglas finaliza inmediatamente y se devuelve al cliente el estado de respuesta "solicitud rechazada". |
El rule
puede definir de forma opcional atributos que anulen los atributos de catálogo correspondientes cuando la regla coincida correctamente. Si varias reglas coincidentes establecen el mismo atributo, prevalecerá la última. Consulte regla para obtener una lista de atributos que se pueden controlar con reglas.
La coincidencia de cadenas simple funciona para aplicaciones muy básicas, pero en la mayoría de los casos se requieren expresiones regulares. Aunque las expresiones regulares son estándares del sector, la implementación específica varía según la instancia.
package java.util.regex describe la implementación de expresiones regulares específica que utiliza el servicio de imágenes.
Para facilitar las modificaciones complejas de las direcciones URL, se pueden capturar subcadenas en la expresión incluyendo la subcadena entre paréntesis (…). Las subcadenas capturadas se numeran secuencialmente empezando por 1 según la posición del paréntesis de apertura. Las subcadenas capturadas pueden insertarse en la sustitución utilizando $ *
n*
, donde n
es el número de secuencia de la subcadena capturada.
Se puede adjuntar un archivo de conjunto de reglas a cada catálogo de imágenes con el atributo catalog attribute::RuleSetFile
. Aunque puede editar el archivo del conjunto de reglas en cualquier momento, el servidor de imágenes reconoce los cambios solo cuando se vuelve a cargar el catálogo de imágenes asociado. Esta recarga se produce cuando se inicia o reinicia el servidor de la plataforma y siempre que el archivo de catálogo principal, que tiene un .ini sufijo de archivo, se modifica o "toca" para cambiar la fecha del archivo.
Ejemplo A. Defina una regla que aumente la configuración de calidad de la imagen si el nombre de la imagen tiene el sufijo " _hg":
<rule>
<expression>(?i)_hg$</expression>
<substitution>\?&qlt=95,1&resmode=bicub</substitution>
</rule>
La expresión de regla especifica una coincidencia que no distingue entre mayúsculas y minúsculas de " _hg" al final de la cadena URL. El sufijo se reemplaza con la cadena de consulta especificada, que cambia la configuración de calidad de la imagen. Tenga en cuenta que la variable ?
en la cadena de sustitución se escapa, ya que se trata de un carácter especial en las expresiones regulares.
La codificación requerida para el carácter ampersand. Alternativamente, la cadena de sustitución podría incluirse en un bloque CDATA:
<substitution><![CDATA[&qlt=95,1&resmode=bicub]]></substitution>
Ejemplo B. Una aplicación web concreta no permite cadenas de consulta. Defina una regla que traduzca el elemento de ruta final small
, medium
, o large
a una plantilla, utilizando el resto de la ruta como nombre de la imagen. Por ejemplo, myCat/myImage/small
se traduciría a myCat/smallTemplate?src=myCat/myImage
.
Podemos utilizar subcadenas para reestructurar la solicitud:
<rule>
<expression>([^/]+)/(small|medium|large)$</expression>
<substitution>$2Template?src=sample/$1</substitution>
</rule>