2016-03-31 2 views
1

Возможно ли сконфигурировать встроенный Jetty (v9) для установки определенных заголовков только для определенных типов файлов ресурсов.Как настроить встроенный Jetty (v9) для установки определенных заголовков для определенных файлов ресурсов?

На данный момент я не делаю ничего особенного для обработки статических ресурсов, поэтому, предположительно, у Jetty есть настройка по умолчанию для этого. Возможно ли продлить или перегрузить этот обработчик по умолчанию с помощью некоторой пользовательской настройки, чтобы я мог установить заголовок Cache-Control только для файлов html?

Я пытаюсь сделать что-то аналогичное следующий бит из Apache конфигурации:

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

... в моей установке Jetty:

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

На самом деле, если это может быть достигнуто в jetty.xml или какой-либо другой файл конфигурации, что было бы предпочтительнее.

+0

я наконец нашел документ, что мне нужно, что, кажется, объяснить вещи хорошо: http://www.eclipse.org /jetty/documentation/current/rewrite-handler.html ... Я сам отправлю ответ на конкретное решение, если смогу заставить его работать – RTF

ответ

2

Я был в состоянии сделать то, что я хотел с помощью этой конфигурации в молы-env.xml для моего веб-приложение:

<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

Ваше решение помогло мне получить чтов с суммарно встроенным способом, который прекрасно работает.

Я использую причал 9.2.19 org.eclipse.jetty.rewrite.handler.RewriteHandler. Я обернуть ResourceHandler в этом RewriteHandler установить конкретные заголовки HTTP (здесь 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... 

 Смежные вопросы

  • Нет связанных вопросов^_^