spring DispatcherServlet,在它之前执行的代码

时间:2012-06-18 23:19:26

标签: spring spring-mvc spring-security

我有春季网络应用程序。我想在每个HTTP请求的开头添加一些常见的代码,以便我可以检查垃圾邮件。我在web.xml中配置了DispatcherServlet,这意味着DispatcherServlet是每个HTTP请求的第一个入口点。我的问题是DispatcherServlet是否提供了首先执行的任何方法,然后控件传递到请求的注释控制器?

3 个答案:

答案 0 :(得分:3)

IMO此类功能属于HandlerInterceptor (ref docs)

答案 1 :(得分:3)

我同意戴夫。您正在寻找的是映射网址上所有请求的过滤器/拦截器。传统上,这是使用ServletFilter完成的。这是您放置自定义代码的位置。例如。

   public FooFilter implements ServletFilter {
    @Override
    void doFilter(ServletRequest request,
              ServletResponse response,
              FilterChain chain)
              throws IOException,
                     ServletException {
        // My Custom check for spam.
    }
}

在ServletFilter中实现自定义代码后,只需在web.xml中配置它即可。

<filter>
    <filter-name>FooFilter</filter-name>
    <filter-class>com.foo.servlet.filters.FooFilter</filter-class>
    <init-param>
        <param-name>test-param</param-name>
        <param-value>Test parameter.</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>FooFilter</filter-name>
    <url-pattern>/*</url-pattern> <!-- The URL to be filtered. -->
</filter-mapping>

它是配置过滤器和拦截您的Web请求的最简单方法。

使用Spring框架时,您需要使用Sping的HandlerInterceptor。关于何时使用可以找到here的内容的非常好的帖子。

希望这有帮助。

答案 2 :(得分:0)

Servlet过滤器可以工作,因为过滤器总是在执行之前执行,而不是任何servlet。过滤器将在Dispatcher servlet之前执行,但拦截器将在Dispatcher servlet之后和Before实际处理程序之前执行!