2011-03-21 4 views
0

В моем приложении Spring я использую org.springframework.web.filter.ShallowEtagHeaderFilter для добавления ETags. Это отлично работает, за исключением случаев, когда я выдаю ДЕЙСТВИТЕЛЬНО большие данные. Тогда у моего приложения заканчивается память и завершается JVM! Если я удалю фильтр, все будет отлично.Фильтры Tomcat: действительны для всего приложения минус несколько URL-адресов

Но мне очень нравится иметь ETags, так как я могу сделать определение фильтра в web.xml, который фильтрует весь сервлет, за исключением нескольких URL-адресов? Мой фильтр выглядит, как это в данный момент:

<filter> 
    <filter-name>etagFilter</filter-name> 
    <filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>etagFilter</filter-name> 
    <servlet-name>MyWebApp</servlet-name> 
</filter-mapping> 

Приветствия

Nik

ответ

3

Там нет никакого способа сделать это декларативно. Я думаю, вам нужно переопределить его doFilter() и принять решение программно на основе свойств запроса.

+0

Хорошо, я сделал это, и что было довольно быстро, так что не проблема, что я не мог» t сделать это декларативно. Немного удивительно, хотя – niklassaers

1

У метода OnePerRequestFilter есть метод, называемый shouldNotFilter(), который вы можете переопределить для этого.

Я делаю что-то подобное для некоторых моих фильтров. Вот фрагмент образца web.xml:

<filter> 
    <filter-name>hibernateFilter</filter-name> 
    <filter-class>com.xyz.config.OpenSessionInViewFilter</filter-class> 
    <init-param> 
     <param-name>excludePaths</param-name> 
     <param-value>/js:/log/</param-value> 
    </init-param> 
</filter> 

И фильтр:

class OpenSessionInViewFilter extends org.springframework.orm.hibernate3.support.OpenSessionInViewFilter { 
    @BeanProperty var excludePaths: String = null 
    val excludePathList = new mutable.ArrayBuffer[String] 

    override def initFilterBean { 
    if (excludePaths != null) { 
     excludePaths.split(':').foreach(excludePathList += _) 
    } 
    super.initFilterBean 
    } 

    override def shouldNotFilter(request: HttpServletRequest) = { 
    val httpServletRequest = request.asInstanceOf[HttpServletRequest] 
    val servletPathInfo = httpServletRequest.getServletPath + httpServletRequest.getPathInfo 
    excludePathList.exists(p => servletPathInfo.startsWith(p)) || DataConfig.noDB 
    } 

}

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

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