我正在使用具有单个 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>
基本上这是在特定时间重定向或拒绝用户请求(用于维护任务或暂时使任何服务不可用)。是否有某种方法可以防止每个请求对过滤器进行多次调用。任何帮助,将不胜感激..