2010-06-09 9 views
7

Was ist der beste Weg, HTTP-Header (basierend auf Dateinamenmustern) in Jetty 6.1 zu setzen? Ist es möglich über die Datei "jetty.xml" (oder "jetty-web.xml")? Oder muss ich web.xml ändern?HTTP-Header mit Jetty setzen

Antwort

8

Sie können Kopfzeilen nach Konfiguration hinzufügen. In jetty.xml, das folgende Beispiel setzen:

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

Siehe RewriteHandler api für weitere Beispiele von dem, was möglich ist (es war bereits in Jetty 6 RewriteHandler)

Informationen, hier ist meine Maven-Konfiguration der Anlegestelle Plugin:

<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> 
+0

Die Links sind tot – Rushil

8

Die allgemeine Antwort auf meine Frage ist natürlich diese:

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

Diese in jedem JavaEE Web-Container funktionieren sollte (und kann mit <init-param> s mehr konfigurierbar gemacht werden).

Aber gibt es nicht eine Möglichkeit, dies rein deklarativ in Jetty zu tun?

+0

akzeptiert, bis jemand herausfindet, wie es deklarativ zu tun. –