代码之家  ›  专栏  ›  技术社区  ›  Chris Lercher

使用Jetty设置HTTP头

  •  9
  • Chris Lercher  · 技术社区  · 14 年前

    在Jetty6.1中设置HTTP头文件(基于文件名模式)的最佳方法是什么?可以通过jetty.xml(或jetty web.xml)吗?还是必须修改web.xml?

    3 回复  |  直到 11 年前
        1
  •  9
  •   Jérôme Radix    12 年前

    您可以通过配置添加头。在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 )

    有关信息,以下是我对Jetty插件的Maven配置:

    <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>
    
        2
  •  9
  •   Chris Lercher    14 年前

    我问题的一般答案当然是:

    <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);
        }
    }
    

    这应该可以在任何JavaeWeb容器中使用(并且可以通过 <init-param> s)。

    但是,难道没有一种方法可以在码头上完全声明地做到这一点吗?

        3
  •  0
  •   whunmr    11 年前

    有一种方法可以在Jetty中添加头。 使用java.lang.instrument和javassist。有关详细信息,请参阅以下链接:

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