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