介绍
Interceptor: 拦截器,作用类似 Filter, 主要作用是拦截用户请求, 在 Action 执行的前后各执行一段代码, 进行相应的业务处理.
作用
使用方式及方法介绍
使用方式分为两种, 一种为: 实现HandlerInterceptor接口或者是继承实现了HandlerInterceptor接口的类, 另一种为: 实现Spring的WebRequestInterceptor接口, 或者是继承实现了WebRequestInterceptor的类.
1.HandlerInterceptor 介绍
package org.springframework.web.servlet;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public interface HandlerInterceptor {/*** 请求处理之前调用 链式 会按照声明顺序依次执行* 返回 true 则继续执行下一个 Interceptor 无则执行 Controller* 返回 false 请求结束*/boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;/*** 在请求处理之后,DispatcherServlet进行视图返回渲染之前进行调用,可以在这个方法中对Controller 处理之后的ModelAndView 对象进行操作。* 调度程序Servlet在执行链中处理一个处理程序,由任意数量的拦截器组成,处理器本身在最后。 使用这种方法,每个拦截器可以后处理一个执行,并按照执行链的相反顺序进行应用*/void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception;/*** 请求处理完成后的回调,即渲染视图后的回调。 将被调用处理程序执行的任何结果,从而允许适当的资源清理。* 注意:只有当这个拦截器的预处理方法已经成功完成并返回时才会被调用* 与postHandle方法一样,该方法将以相反的顺序在链中的每个拦截器上调用,因此第一个拦截器将成为最后被调用的拦截器*/void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception;}
2.WebRequestInterceptor 介绍
package org.springframework.web.context.request;import org.springframework.ui.ModelMap;import org.springframework.web.context.request.WebRequest;public interface WebRequestInterceptor {/*** 在调用之前拦截请求处理程序的执行。 允许准备上下文资源(如Hibernate Session)并将它们公开为请求属性或线程本地对象.* 即 准备一些需要的资源, 例如, 将请求属性放置到 WebRequest 中* 无返回对象*/void preHandle(WebRequest request) throws Exception;/*** 在视图呈现前(如果有的话)在成功调用之后拦截请求处理程序的执行。* 允许在成功处理程序执行后修改上下文资源(例如,刷新休眠会话)* 可以通过修改 ModelMap 的属性来改变你返回的试图模型*/void postHandle(WebRequest request, ModelMap model) throws Exception;/*** 求处理完成后的回调,即渲染视图后的回调。 将被调用处理程序执行的任何结果,从而允许适当的资源清理。* 注意:只有在拦截器的预处理方法成功完成时才会调用*/void afterCompletion(WebRequest request, Exception ex) throws Exception;}
xml 配置
1.在 *-servlet.xml 中添加 MVC schema
xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation=" http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
2.配置 mvc:interceptors 标签
<mvc:interceptors><mvc:interceptor><!-- 拦截路径 --><mvc:mapping path="/**"/><!-- 指定拦截器 --><bean class="com.liuzhihang.myprojext.controller.interceptor.RequestInterceptor"/></mvc:interceptor></mvc:interceptors>
使用示例
package com.liuzhihang.myprojext.controller.interceptor;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class RequestInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 处理逻辑return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}}
