2011-04-11 14 views
8

¿Hay alguna manera fácil de proporcionar URLs insensibles a mayúsculas y minúsculas en un servicio web JAX-RS? El objetivo de esto es producir un servicio web que sea un "aceptador indulgente".URL que no distinguen entre mayúsculas y minúsculas con JAX-RS

Imagino que es posible hacer esto con un filtro que .to[Lower|Upper]Case() s todas las URL entrantes. Lamentablemente, esta implementación exige disciplina/coherencia del programador para garantizar que todas las cadenas de URL codificadas en la aplicación sean estrictamente el caso [inferior | superior].
Además, aún no conozco el JAX-RS analógico para un filtro de servlet.

Si es importante, estoy usando Jersey como mi implementación JAX-RS.


igual que en, "ser indulgentes en lo que acepta y estricta en lo que se produce" (no recuerdo la fuente)

+0

Puede colocar filtros de servlet delante de un motor JAX-RS (o puede hacerlo con CXF; así es como manejo mi seguridad a través de un enlace a Spring Security). –

+1

Ley de Postel http://en.wikipedia.org/wiki/Robustness_principle Sin embargo, los servidores deben proporcionar las URL que deben seguir los clientes, utilizando hipermedia, por lo tanto, debe aplicarse aquí el "estricto en lo que produce".La especificación HTTP RFC 2616 dice que las URL http deben ser sensibles a mayúsculas y minúsculas, excepto para el esquema y el host. –

+0

@Darrel: gracias por el enlace, y usted hace un buen punto. Veré lo que la gente de arriba tiene que decir al respecto. –

Respuesta

7

la respuesta es no, ya básicamente los URI según RFC 3986 distinguen entre mayúsculas y minúsculas:

6.2.2.1. Caso Normalización

Para todos los URI, los dígitos hexadecimales dentro de un triplete código porciento (por ejemplo, "% 3a" frente a "% 3A") son sensibles a mayúsculas y por lo tanto debe ser normalizada para utilizar letras mayúsculas para los dígitos AF.

Cuando un URI usa componentes de la sintaxis genérica, siempre se aplican las reglas de equivalencia de sintaxis del componente ; a saber, que el esquema y el host no distinguen mayúsculas de minúsculas y, por lo tanto, deben normalizarse en en minúscula. Por ejemplo, el URI es equivalente a http://www.example.com/. Se supone que los demás componentes de sintaxis genérica distinguen entre mayúsculas y minúsculas, a menos que el esquema especifique lo contrario (ver Sección 6.2.3).

Si aún desea que no distingan entre mayúsculas y minúsculas, puede utilizar un filtro de servlet y colocarlo delante del marco JAX-RS. Aún necesita ser consistente en su aplicación.

Si considera cambiar de Jersey a Apache Wink, puede usar el Dynamic Resources para asegurarse de que todas las direcciones URL son inferiores/mayúsculas. Por lo tanto, combinar un filtro de servlet con los recursos dinámicos puede ser una solución completa para este caso.

+0

La respuesta depende de su definición de "fácil" – statueofmike

4

Creo que encontré una solución simple que cumple con la especificación JAX-RS. Usted es capaz de utilizar en @Path anotación de expresión regular como esto:

@Path("/{message:[mM][eE][sS][aA][gG][eE]}") 

lo he utilizado con JBoss RESTeasy IMPLEMENTACIÓN. Ver más there.

+4

El indicador de mayúsculas y minúsculas funciona para mí con Jersey 2.10 '@Path ("/{message: (? I) message} ")' – statueofmike

Cuestiones relacionadas