2011-10-30 9 views
5

¿Hay alguna manera por aplicación/contexto web para especificar un archivo de reescritura solo para esa aplicación web en particular? La única forma en que veo que esto funciona actualmente es a través de la línea de comando cuando lo inicias. Estaba pensando en una configuración en el archivo override.xml o incluso en el archivo xml de contexto.¿Se puede asignar por aplicación web los archivos jetty-rewrite.xml en Jetty?

+0

Puede haber algo relacionado con hacer esto en https://github.com/eclipse/jetty.project/blob/master/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/ RewriteHandler.java pero no está claro. –

Respuesta

1

Si usa los deployables de context.xml, puede integrar las reglas de RewriteHandler en el contexto específico de la aplicación xml.

Ejemplo: este es un reemplazo context.xml del ${jetty.home}/contexts/test.xml que se encuentra en la distribución de embarcadero. Agrega una regla que simplemente agrega una cookie (visitada = sí) en la respuesta para todas las solicitudes.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> 

<Configure class="org.eclipse.jetty.server.handler.ContextHandler"> 
    <Set name="contextPath">/</Set> 
    <Set name="handler"> 
    <New id="Rewrite" class="org.eclipse.jetty.rewrite.handler.RewriteHandler"> 
     <Set name="handler"> 
     <New class="org.eclipse.jetty.webapp.WebAppContext"> 
      <Set name="contextPath">/</Set> 
      <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/test.war</Set> 
      <Set name="extractWAR">true</Set> 
      <Set name="copyWebDir">false</Set> 
      <Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set> 
      <Set name="overrideDescriptor"><SystemProperty name="jetty.home" default="."/>/contexts/test.d/override-web.xml</Set> 
     </New> 
     </Set> 
     <Set name="rewriteRequestURI">true</Set> 
     <Set name="rewritePathInfo">false</Set> 
     <Set name="originalPathAttribute">requestedPath</Set> 

     <!-- add a cookie to each path visited --> 
     <Call name="addRule"> 
     <Arg> 
      <New class="org.eclipse.jetty.rewrite.handler.CookiePatternRule"> 
      <Set name="pattern">/*</Set> 
      <Set name="name">visited</Set> 
      <Set name="value">yes</Set> 
      </New> 
     </Arg> 
     </Call> 
    </New> 
    </Set> 
</Configure> 

Para comprobar que esta regla funciona, iniciar embarcadero, ir a http://localhost:8080/ y luego usar el "Sesiones" componente de prueba, verá que visited=true será visible como una cookie en la parte superior.

+0

_ "Si usa context.xml deployables" _ - No sé lo que eso significa, pero tengo cada contexto individual definido en '{embarcadero}/contextos/{nombre} .xml' - No tengo una prueba .xml o cualquier componente de prueba. –

+0

Intenté aplicar este ejemplo a una configuración de contexto existente (transfiriendo los comandos Establecer de la configuración de WebAppContext a la etiqueta nueva respectiva en su ejemplo), pero eso dio como resultado un StackOverflowError en 'org.eclipse.jetty.server.Dispatcher $ ForwardAttributes.setAttribute (Dispatcher.java:410) '([full trace] (http://pastebin.com/vZEvmDRj)) cuando intenta acceder a'/'- parece que funciona (incluye el encabezado set-cookie con la respuesta) cuando visita un archivo específico. –

+0

No sé si esto es un error de Jetty, o debido a alguna configuración incorrecta o algo más. Una explicación de cómo funciona este manipulador de cosas puede ser útil. (Al intentar depurar el problema, saqué el context-path de nivel superior, no pareció cambiar nada, así que me pregunto si es necesario). –

Cuestiones relacionadas