2016-03-31 3 views
1

Ist es möglich, Embedded Jetty (v9) zu konfigurieren, um bestimmte Header nur für bestimmte Ressourcendateitypen festzulegen.Wie konfiguriere ich Embedded Jetty (v9), um bestimmte Header für bestimmte Ressourcendateien festzulegen?

Im Moment mache ich nichts besonderes, um mit statischen Ressourcen umzugehen, also hat Jetty vermutlich ein Standard-Handler-Setup, um das zu tun. Ist es möglich, diese Standard-Handler mit einigen benutzerdefinierten Setup zu erweitern oder zu überlasten, so dass ich die Cache-Control Header für html Dateien nur festlegen kann?

Ich versuche, etwas analog zu dem folgend bisschen Apache Config zu erreichen:

<Files "*.html"> 
    Header set Cache-Control "public, max-age=900" 
</Files> 

... in meinem Jetty Setup:

public static void main(String[] args) throws Exception { 
    Server server = new Server(443); 
    WebAppContext webapp = new WebAppContext(); 
    webapp.setContextPath("/"); 
    webapp.setWar("war"); 
    server.setHandler(webapp); 
    ... 
    ... 
} 

Eigentlich, wenn dies dadurch erreicht werden kann, jetty.xml oder eine andere Konfigurationsdatei, wäre das vorzuziehen.

+0

fand ich schließlich das Dokument, das ich brauche, die Dinge gut zu erklären scheint: http://www.eclipse.org /jetty/documentation/current/rewrite-handler.html ... Ich werde selbst eine Antwort mit einer spezifischen Lösung posten, wenn ich es zum Laufen bringen kann – RTF

Antwort

2

ich war in der Lage zu erreichen, was ich mit dieser Konfiguration in Anlegesteg-env.xml für meine Webapp wollte:

<Configure class="org.eclipse.jetty.webapp.WebAppContext"> 

    <Call name="insertHandler"> 
     <Arg> 
     <New id="Rewrite" class="org.eclipse.jetty.rewrite.handler.RewriteHandler"> 
     <Set name="rewriteRequestURI"><Property name="jetty.rewrite.rewriteRequestURI" deprecated="rewrite.rewriteRequestURI" default="true"/></Set> 
     <Set name="rewritePathInfo"><Property name="jetty.rewrite.rewritePathInfo" deprecated="rewrite.rewritePathInfo" default="false"/></Set> 
     <Set name="originalPathAttribute"><Property name="jetty.rewrite.originalPathAttribute" deprecated="rewrite.originalPathAttribute" default="requestedPath"/></Set> 

     <Call name="addRule"> 
      <Arg> 
      <New class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule"> 
       <Set name="pattern">*.html</Set> 
       <Set name="name">Cache-Control</Set> 
       <Set name="value">Max-Age=900,public</Set> 
       <Set name="terminating">true</Set> 
      </New> 
      </Arg> 
     </Call> 

     </New> 
    </Arg> 
    </Call> 

</Configure> 
0

Ihre Lösung hat mir geholfen, daßin einen totaly eingebettet Art und Weise zu erhalten, die gut funktioniert.

Ich benutze Steg 9.2.19 org.eclipse.jetty.rewrite.handler.RewriteHandler. Ich lege meine ResourceHandler in diesem RewriteHandler spezifische HTTP-Header zu setzen (hier Cache-Control):

RewriteHandler rewriteHandler = new RewriteHandler(); 
rewriteHandler.addRule(new Rule() 
    { 
    @Override 
    public String matchAndApply(String target, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException 
    { 
    // you can check the target for its path or filetype or whatever 
    if((target.endsWith(".woff2")) || ... || (target.endsWith(".jpg"))) 
     { 
     httpServletResponse.setHeader("Cache-Control", "public, max-age=2592000"); 
     } 
    return null; 
    } 
    }); 
// set the RewriteHandler around the ResourceHandler 
rewriteHandler.setHandler(resource_handler); 
// set the RewriteHandler to the Webservers Handlerlist... 
Verwandte Themen