spring DispatcherServlet,在它之前执行的代码
Posted
技术标签:
【中文标题】spring DispatcherServlet,在它之前执行的代码【英文标题】:spring DispatcherServlet, code to execute before it 【发布时间】:2012-06-20 23:42:35 【问题描述】:我有 Spring Web 应用程序。我想放一些常见的代码,这些代码将在每个 HTTP 请求的开头执行,以便我可以检查垃圾邮件。我在web.xml
中配置了DispatcherServlet
,这意味着DispatcherServlet
是每个HTTP 请求的第一个入口点。我的问题是DispatcherServlet
是否提供了任何方法,这些方法将首先执行,然后将控制传递给请求的注释控制器?
【问题讨论】:
【参考方案1】:我会同意戴夫。您正在寻找的是映射 url 上所有请求的过滤器/拦截器。传统上,这是使用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。
希望这会有所帮助。
【讨论】:
ServletFilter?你的意思是javax.servlet.Filter?顺便说一句,链接坏了。并记得拨打chain.doFilter(request), response);
【参考方案2】:
IMO 这种功能属于HandlerInterceptor
(ref docs)。
【讨论】:
【参考方案3】:Servlet 过滤器会起作用,因为过滤器总是比任何 Servlet 都先执行。过滤器将在 Dispatcher servlet 之前执行,但拦截器将在 Dispatcher servlet 之后和实际处理程序之前执行!
【讨论】:
这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post。 - From Review 在我看来,我总结了两点回答问题,一是在调度程序servlet之前可以使用过滤器,在调度程序之后和控制器之前可以使用spring的拦截器,这还不够吗?以上是关于spring DispatcherServlet,在它之前执行的代码的主要内容,如果未能解决你的问题,请参考以下文章
Initializing Spring DispatcherServlet dispatcherServlet
spring学习--DispatcherServlet工作原理