用程序拦截器拦截请求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用程序拦截器拦截请求相关的知识,希望对你有一定的参考价值。

Servlet API可以在每个Web请求得到servlet处理的前后,进行预处理和后处理。

有时候希望预先和事后处理Spring MVC处理的请求,在方法返回的模式属性传递视图之前操纵它们。

(这两种有什么不同呢)

Spring MVC允许使用程序拦截器(Handler inteceptors)拦截Web请求进行预先和事后处理。

可以为特定的URL映射注册处理程序拦截器,这样就只拦截映射到某些URL的请求。

技术分享

技术分享

每个拦截器都要实现HandlerInterceptor接口,有三个回调方法供实现。

preHandler()在处理程序处理请求之前调用

postHandler()在处理程序处理请求之后调用

afterCompletion()在所有的请求处理完之后(也就是在视图显示之后)调用

 

public class 方法1 implements HandlerInterceptor {

public boolean preHandle (HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

方法返回true,允许DispatcherServlet继续请求处理

否则DispatcherServlet认为这个方法已经处理了请求,于是将响应直接发送给用户

 

}

 

public void postHandler(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modeAndView) throws Exception {

 

}

 

public void afterCompletion (HttpServletRequest request, HttpServletResponse, Object handler, Exception ex) throws Exception {

 

}

 

}

实现一个接口即使不需要全部的方法,也必须实现它们。

更好的方式是用扩展拦截器适配器类代替,这个类默认实现所有的拦截器方法,你可以只覆盖需要的方法。

 

public class 自己的拦截器1 extends HandlerInterceptorAdapter {

 

public boolean preHandler (HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

 

}

 

public void postHandler (HttpServeletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

 

 

}

 

 

}

 

 

请求属性?

处理程序拦截器注册到DefaultAnnotationHandlerMapping bean,这个Bean负责将拦截器应用到所有以@Controller注解的类。你可以在数组类型的interceptors属性中指定多个拦截器。

 

 

使用DefaultAnnotationHandlerMapping有一个特殊的确定,拦截器会分配给每个用@Controller注解定义的类,如果你有几对拦截器,希望区分拦截器所对应的控制器。

 

为此需要自己定义处理程序拦截器。

Scott Murphy的spring-plugins允许使用URL在控制器的基础上应用拦截器。

根据URL来将拦截器应用到不同的控制器上。

以上是关于用程序拦截器拦截请求的主要内容,如果未能解决你的问题,请参考以下文章

jq AJAX拦截器

axios中的请求拦截器怎么用

spring mvc的拦截器的posthandle怎么用

java中过滤器和拦截器的区别

微信小程序-请求接口拦截

JAVA SSM拦截器是啥?