Можно ли назначить для каждого веб-приложения файлы jetty-rewrite.xml в Jetty? - PullRequest
5 голосов
/ 30 октября 2011

Есть ли способ для веб-приложения / контекста указать файл перезаписи только для этого конкретного веб-приложения?Единственный способ увидеть, как это работает в данный момент, - это запустить его через командную строку.Я подумал, может быть, настройка в файле override.xml или даже в файле контекста xml.

1 Ответ

1 голос
/ 22 августа 2012

Если вы используете раскрываемые файлы context.xml, вы можете интегрировать правила RewriteHandler в специфический контекст приложения xml.

Пример: это замещающий context.xml файла ${jetty.home}/contexts/test.xml, найденного в дистрибутиве jetty. Он добавляет правило, которое просто добавляет куки (посещенный = да) в ответ на все запросы.

<?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>

Чтобы убедиться, что это правило работает, запустите jetty, перейдите на http://localhost:8080/, а затем используйте тестовый компонент "Сеансы", вы увидите, что visited=true будет отображаться как cookie в верхней части.

...