Установка заголовков HTTP с помощью Jetty - PullRequest
9 голосов
/ 10 июня 2010

Какой лучший способ установить заголовки HTTP (на основе шаблонов имен файлов) в Jetty 6.1? Возможно ли это через jetty.xml (или jetty-web.xml)? Или мне нужно изменить web.xml?

Ответы [ 3 ]

9 голосов
/ 26 августа 2012

Вы можете добавить заголовки по конфигурации. В файле jetty.xml поместите следующий пример:

<New id="RewriteHandler" class="org.eclipse.jetty.rewrite.handler.RewriteHandler">
  <Set name="rules">
    <Array type="org.eclipse.jetty.rewrite.handler.Rule">

      <Item>
        <New id="header" class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule">
          <Set name="pattern">*.jsp</Set>
          <Set name="name">myheader</Set>
          <Set name="value">the value of myheader</Set>
        </New>
      </Item>

    </Array>
  </Set>
</New>

<Set name="handler">
  <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
    <Set name="handlers">
      <Array type="org.eclipse.jetty.server.Handler">
        <Item>
          <Ref id="RewriteHandler"/>
        </Item>
      </Array>
    </Set>
  </New>
</Set>

См. RewriteHandler api для получения дополнительных примеров того, что возможно (это было уже доступно в Jetty 6 RewriteHandler )

Для информации, вот моя maven конфигурация плагина Jetty:

<plugin>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>8.1.5.v20120716</version>
  <configuration>
    <jettyXml>${basedir}/src/main/etc/jetty.xml</jettyXml>
  </configuration>
  <dependencies>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-http</artifactId>
      <version>8.1.5.v20120716</version>
      <type>jar</type>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-rewrite</artifactId>
      <version>8.1.5.v20120716</version>
      <type>jar</type>
      <scope>runtime</scope>
    </dependency>
  </dependencies>
</plugin>
9 голосов
/ 10 июня 2010

Общий ответ на мой вопрос, конечно, такой:

<web-app>

  <filter>
    <filter-name>headersFilter</filter-name>
    <filter-class>com.example.MyHeadersFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>headersFilter</filter-name>
    <url-pattern>*</url-pattern>
  </filter-mapping>

  ...

</web-app>

public class MyHeadersFilter implements Filter {

    @Override
    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
            throws IOException,
            ServletException {

        final HttpServletRequest httpRequest = (HttpServletRequest) request;
        final HttpServletResponse httpResponse = (HttpServletResponse) response;

        final String requestUri = httpRequest.getRequestURI();

        if (requestUri.matches(...)) {
            httpResponse.addHeader(...);
        }

        chain.doFilter(request, response);
    }
}

Это должно работать в любом веб-контейнере JavaEE (и его можно сделать более настраиваемым с помощью <init-param> s).

Но разве нет способа сделать это чисто декларативно в Jetty?

0 голосов
/ 26 декабря 2012

Есть способ добавить заголовок в причале. используя java.lang.instrument и javassist. за подробностями обращайтесь по следующей ссылке:

http://hunmr.blogspot.com/2012/12/mock-jetty-behavior-adding-customized.html

...