SpringMVC拦截器

来源:互联网 发布:狸视频剪辑软件下载 编辑:程序博客网 时间:2024/06/05 14:26

常见应用场景

日志记录、权限检查、性能监控、通用行为


SpringMVC中的interceptor拦截请求是通过HandlerInterceptor来实现的。主要有两种方式:

第一种是要定义的Interceptor类要实现Spring的HandlerInterceptor接口,或者是这个类继承实现了HandlerInterceptor接口的累,比如Spring已经提供实现了Handlerinterceptor接口的抽象类HandlerInterceptorAdapter;

第二种是实现Spring的WebRequestInterceptor接口,或者是继承实现了WebRequestInterceptor的类


HandlerInterceptor接口

1.preHandle(HttpServletRequest request, HttpServletResponse response, Object handle)方法,该方法将请求处理之前进行调用。SpringMVC中的Interceptor是链式的调用的,在一个应用中或者是在一个请求中可以同时存在多个Interceptor。每个Interceptor的调用会依据它的生命顺序依次执行,而且最先执行都是Interceptor中的preHandle方法,所以可以在这个方法中进行一些前置初始化操作或者是对当前请求的一个预处理,也可以在这个方法中进行一些判断来决定请求是否要继续进行下去。该方法的返回值是布尔值Boolean类型,当它返回为false时,表示请求结束,后续的Interceptor和Controller都不会再执行,当返回值为true时就会继续调用下一个Interceptor的preHandle方法,如果已经是最后一个Interceptor的时候就会是调用当前请求的Controller方法。

2.postHandle(HttpServletRequest request, HttpServletResponse response, Object handle, ModelAndView modelAndView),在当前请求进行处理之后,也就是Controller方法调用之后执行,但是它会在DispatcherServlet进行视图返回渲染之前被调用,所以我们可以在这个方法中对Controller处理之后的ModelAndView对象进行操作。postHandle方法被调用的方向跟preHandle是相反的。

3.afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handle, Exception ex),该方法需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行。该方法将在整个请求结束之后,也就是在DispatcherServlet渲染了对应的视图之后执行。这个方法的主要作用是用于进行资源清理工作


<mvc:interceptors><!--使用bean定义一个Interceptor,直接定义在mvc:interceptors根下面的Interceptor将拦截所有的请求><bean class="com.host.app.web.interceptor.AllInterceptor"/><mvc:interceptor><mvc:mapping path="/test/number.do"/><!--定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的 --><bean class="com.host.app.web.interceptor.LoginInterceptor" /></mvc:interceptor></mvc:interceptors>


0 0
原创粉丝点击