【问题标题】:spring DispatcherServlet, code to execute before itspring DispatcherServlet,在它之前执行的代码
【发布时间】:2012-06-20 23:42:35
【问题描述】:

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

【问题讨论】:

    标签: spring spring-mvc spring-security


    【解决方案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

    希望这会有所帮助。

    【讨论】:

    【解决方案2】:

    IMO 这种功能属于HandlerInterceptor (ref docs)

    【讨论】:

      【解决方案3】:

      Servlet 过滤器会起作用,因为过滤器总是比任何 Servlet 都先执行。过滤器将在 Dispatcher servlet 之前执行,但拦截器将在 Dispatcher servlet 之后和实际处理程序之前执行!

      【讨论】:

      • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post。 - From Review
      • 在我看来,我总结了两点回答问题,一是在调度程序servlet之前可以使用过滤器,在调度程序之后和控制器之前可以使用spring的拦截器,这还不够吗?
      猜你喜欢
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 2019-06-19
      • 2022-08-03
      相关资源
      最近更新 更多