Spring过滤器调用多次

时间:2013-06-13 12:24:53

标签: spring filter

我正在使用具有单个DispatcherServlet的spring 2.5应用程序。该应用程序还将与Jersey集成以用于REST服务。

我正在尝试过滤每个请求到应用程序。 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 个答案:

答案 0 :(得分:1)

好像你没有做错任何事。您的过滤器每次请求仅被称为 。但是这个:

  

通过尝试三个不同的请求,结果显示该页面   其中有更多样式表/脚本文件有助于更多   函数调用。

让我觉得您不了解浏览器加载网页的方式。网页上的每个资产(脚本,样式表,图像)都会在其自己的请求中加载。没有链接资源的简单HTML应该会导致单个服务器调用。