【问题标题】:How to preprocess all requests in Spring Web application?如何预处理 Spring Web 应用程序中的所有请求?
【发布时间】:2016-03-31 10:49:58
【问题描述】:

我有一个RESTful Spring 应用程序,它可以处理各种控制器和各种@RequestMapping-s 的各种请求。

现在我希望每个请求另外包含一个用户/密码对,用户作为用户GET 参数?user=username 和密码POST 参数中的密码。

是否可以在所有请求进入控制器之前“预处理”所有请求并检查凭据并可能返回身份验证错误?

这是不是调用者“过滤器”的机制?

【问题讨论】:

  • 在你的情况下选择 Spring-security 以及 Spring-MVC 会更好。
  • 这种机制在 Spring MVC 中称为“拦截器”
  • @vishalgajera 如何使用 Spring Security 保持 RESTful? stackoverflow.com/questions/34453693/…
  • 你尝试实现 HandlerInterceptor 了吗?

标签: java spring spring-mvc web-applications


【解决方案1】:

有几种方法可以在请求进入控制器之前拦截它们。

  1. 使用 Servlet 过滤器:
    @WebFilter(urlPatterns = "path-to-intercept", filterName = "your-filter-name")
    public class MyRequestFilter implements Filter {
        init(...);
        doFilter(...);
        destroy(); 
    }
  1. 使用 Spring HandlerIntecptors:
    public class MyRequestInterceptor extends HandlerInterceptorAdapter{

        preHandle(...); //called before the request lands to the controller.
        postHandle(...); //called after the controller method finishes execution.
        afterCompletion(...); //called before the response is sent.
    }

在你的配置中:

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/yourInterceptingPath/" />
            <bean class="path-to-your-Interceptor.MyRequestInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors> 

【讨论】:

  • 在您的 servlet 配置文件中。
  • 我没有也不想创建一个:)
  • 那么您的请求将如何处理?
  • servlet 3.0 不允许web.xml
  • 是的。但是为了在 Spring MVC 中处理请求,您必须注册 Dispatcher Servlet。在这种情况下,您可以使用选项 1。
猜你喜欢
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
  • 1970-01-01
  • 2011-11-02
  • 2018-02-28
  • 2012-08-20
相关资源
最近更新 更多