2013-06-13 3 views
1

Я работаю с приложением весны 2.5, которое имеет один DispatcherServlet. Приложение также будет интегрировано с услугами Джерси для REST.Весенний фильтр, называемый Multiple times

Я пытаюсь отфильтровать каждый запрос в приложении. Filter/OncePerRequestFilter (я пробовал оба) работают нормально, но кажется, что приложение вызывает doFilter/doInternalFilter несколько раз для одного запроса. Попробовав еще три разных запроса, оказалось, что страницы, в которых есть больше файлов стилей/скриптов, способствуют увеличению количества вызовов функций.

Я делаю что-то неправильно с фильтрующей стандартной архитектурой. Есть ли что-нибудь нужно изменить или добавить к применению ..

public class UnfepiRequestFilter extends OncePerRequestFilter{ 

    @Override 
    protected void doFilterInternal (HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { 
     System.out.println("Start filtering"); 

     filterChain.doFilter(request, response); 

     System.out.println("Done Filtering"); 
    } 

} 

web.xml файл:

<filter> 
    <filter-name>filterHeader</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>filterHeader</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    </filter-mapping> 

    <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/myApp-servlet.xml</param-value> 
    </context-param> 
    <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <display-name>myApp</display-name> 
    <servlet> 
    <servlet-name>myApp</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>myApp</servlet-name> 
    <url-pattern>*.htm</url-pattern> 
    <url-pattern>*.action</url-pattern> 
    <url-pattern>*.json</url-pattern> 
    </servlet-mapping> 

В основном это перенаправить или отклонить запросы пользователей в определенное время (для работ по техническому обслуживанию или временно делая любую услугу недоступной). Есть ли способ предотвратить эти множественные вызовы на запрос в фильтр. Любая помощь была бы оценена.

ответ

1

Кажется, что вы ничего не делаете неправильно. Ваш фильтр называется только один раз за запрос. Однако это:

Стараясь более трех различных запросов оказалось, что страницы в которых есть больше стилей/файлы сценариев способствуют более вызовов функций.

Заставляет меня думать, что вы не понимаете, как веб-страницы загружаются браузером. Каждый ресурс на веб-странице (сценарий, таблица стилей, изображение) загружается в свой собственный запрос. Простой HTML без связанных ресурсов должен привести к одному серверному вызову.

+0

Вы решили эту проблему? – Nitish

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