Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / SpringMVC中拦截器的使用

什么是拦截器
  • 拦截器通常一般指的是通过拦截从浏览器发往服务器的一些请求来完成某些功能的一段程序代码
  • 一般在一个请求发生之前,发生时,发生后我们都可以对请求进行拦截
拦截器可以做什么拦截器可以用于权限验证、解决乱码、操作日志记录、性能监控、异常处理等自定义拦截器可以通过继承Spring框架中的HandlerInterceptorAdapter类,然后重写preHandle,postHandle,afterCompletion三个方法,在三个方法中写我们自己要想实现的业务逻辑代码。/**
 * 自定义拦截器
 * @author admol
 */
public class MyInterceptor extends HandlerInterceptorAdapter {
 /**
  * 在请求之前执行
  * @param request
  * @param response
  * @param handler 表示被拦截的请求目标
  * @return false:拦截请求,终止请求 true:继续执行请求
  */
 @Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
        Object handler) throws Exception {
  //业务逻辑代码编写...(如:解决乱码,权限验证)
  request.setCharacterEncoding("utf-8");
  return true;
 }
 
 /**
  * @param modelAndView 可以对视图进行操作
  */
 @Override
 public void postHandle(HttpServletRequest request, HttpServletResponse response,
       Object handler, ModelAndView modelAndView) throws Exception {
  //业务逻辑代码编写...(如:操作日志记录,更改视图信息)
 }
 
 /**
  * @param ex 异常
  */
 @Override
 public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
        Object handler, Exception ex) throws Exception {
  //业务逻辑代码编写...(如:,资源销毁,异常处理)
 }
}a) public boolean preHandle(HttpServletRequest request,HttpServletResponse response,
Object handler) throws Exception
该方法在action执行前执行,可以实现对数据的预处理,比如:编码、防重复提交安全控制等。
如果方法返回true,则继续执行action。返回false则拦截请求b) public void postHandle(HttpServletRequest request,HttpServletResponse response,
Object handler,ModelAndView modelAndView) throws Exception
该方法在action执行后,生成视图前执行。在这里,我们有机会修改视图层数据。c) public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception
最后执行,通常用于释放资源,处理异常。我们可以根据ex是否为空,来进行相关的异常处理。注册拦截器在xml文件中配置: <mvc:interceptors>
 <bean id="myInterceptor" class="com.admol.web.MyInterceptor" />
</mvc:interceptors>当有多个拦截器的时候可以写多个bean
当我们只想拦截部分指定请求时: <mvc:interceptors>
      <!-- path:需要拦截的请求,不写时会拦截所有请求 -->
  <mvc:mapping path="/*.htm" /> 
  <bean id="myInterceptor" class="com.admol.web.MyInterceptor" />
</mvc:interceptors>多个拦截器xml配置: <mvc:interceptors>
 <bean id="myInterceptor" class="com.admol.web.MyInterceptor" />
 <bean id="myInterceptor2" class="com.admol.web.MyInterceptor2" />
</mvc:interceptors>当配置有多个拦截器的时候,会按拦截器顺序执行preHandle方法,然后再倒序执行postHandle和afterCompletion方法。其他实现方式
1.实现接口 implements HandlerInterceptor
2.实现接口 implements WebRequestInterceptor
注册拦截器方法不变与过滤器的区别1.过滤器是依赖于Servlet容器,基于回调函数,Intercepto依赖与框架,基于反射机制
2.过滤器的过滤范围更大,还可以过滤一些静态资源,拦截器只拦截请求Spring+SpringMVC企业快速开发架构搭建  http://www.linuxidc.com/Linux/2015-09/122942.htmSpringMVC的乱码处理  http://www.linuxidc.com/Linux/2015-07/120542.htmSpring MVC+Spring3+Hibernate4开发环境搭建 http://www.linuxidc.com/Linux/2013-07/87119.htm Spring MVC整合Freemarker基于注解方式 http://www.linuxidc.com/Linux/2013-02/79660.htm 基于注解的Spring MVC简单介绍 http://www.linuxidc.com/Linux/2012-02/54896.htmSpringMVC详细示例实战教程 http://www.linuxidc.com/Linux/2015-06/118461.htmSpring MVC 框架搭建及详解 http://www.linuxidc.com/Linux/2012-01/52740.htmSpringMVC 异常处理  http://www.linuxidc.com/Linux/2015-06/119049.htm本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-12/126840.htm