将堆内存SpringMVC使用拦截器对请求进行拦截处理,以实现特定的功能:

具体实现:

1、自定义一个实现HandlerInterceptor接口的类并实现接口中定义的抽象方法(实现了三个方法,分别处理Handler Method方法执行前、执行后以及渲染视图后的操作)

package com.zzj.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; public class MyInterceptor implements HandlerInterceptor{ @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
     //该方法在Handler Method之前被调用
     //作用:常用于实现权限
        System.out.println("preHandle");
return false;
} @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
     //该方法在Handler Method之后,渲染视图之前
     //
常用于对请求域中的属性或视图做出修改
        System.out.println("postHandle");

    }

    @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
     //该方法在渲染视图之后被调用

      //作用:常用于释放资源 

        System.out.println("afterCompletion");
} }

2、 配置拦截器

a、所有请求

<mvc:interceptors>
<bean class="com.zzj.interceptor.MyInterceptor"></bean>
</mvc:interceptors>

b、特定请求

<mvc:interceptors>
<mvc:interceptor>

      <!--

mvc:exclude-mapping用于设置不拦截哪些路径的请求;mvc:mapping用于设置拦截哪些路径的请求,如下例子:

/userinfo只拦截/userinfo请求,不拦截/userinfo/toView.do请求

/userinfo/*拦截/userinfo/xxx请求

-->

        <mvc:mapping path="/userinfo/*"/>
<bean class="com.zzj.interceptor.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>

拦截器的执行过程分析:

我们在发送一个请求后必定会执行DispatchServlet中的doDispatch方法,而在执行如下方法的顺序我们来分析一下:

preHandle方法(在Handler Method方法执行前调用。功能举例:校验、实现权限等)

 通过标蓝代码我们可以看到preHandle在Handler Method之前执行,

mappedHandler.applyPreHandle(processedRequest, response)执行的也就是我们创建的拦截器里的preHandler方法,

我们可以在该方法里通过返回boolean的值来决定是打回请求(拒绝访问),还是继续执行之后的步骤。

postHandle方法(在Handler Method方法执行后,渲染视图前调用。功能举例:加签名,印章等)

标蓝部分即postHandlle的执行,可见他在Handler Method之后执行,而在processDispatchResult(该方法里将会进行视图渲染,详见下方法图)之前执行

afterCompletion方法(在渲染视图之后被调用。功能举例:释放资源)

 由上方法介绍可知,之后会执行processDispatchResult方法,我们找到该方法,可见render方法,该方法我们在自定义视图的博客中介绍过,是用来进行渲染视图的

在渲染视图后,才会执行afterCompletion方法

SpringMVC:详述拦截器的更多相关文章

  1. springmvc的拦截器

    什么是拦截器                                                         java里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使 ...

  2. SpringMVC利用拦截器防止SQL注入

    引言 随着互联网的发展,人们在享受互联网带来的便捷的服务的时候,也面临着个人的隐私泄漏的问题.小到一个拥有用户系统的小型论坛,大到各个大型的银行机构,互联网安全问题都显得格外重要.而这些网站的背后,则 ...

  3. SpringMVC经典系列-14自己定义SpringMVC的拦截器---【LinusZhu】

    注意:此文章是个人原创.希望有转载须要的朋友们标明文章出处.假设各位朋友们认为写的还好,就给个赞哈.你的鼓舞是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系linusz ...

  4. 基于注解风格的Spring-MVC的拦截器

    基于注解风格的Spring-MVC的拦截器 Spring-MVC如何使用拦截器,官方文档只给出了非注解风格的例子.那么基于注解风格如何使用拦截器呢? 基于注解基本上有2个可使用的定义类,分别是Defa ...

  5. SpringMVC 学习-拦截器 HandlerInterceptor 类

    一.拦截器 HandlerInterceptor 类的作用 SpringMVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理. 二.怎么使用呢? 1. ...

  6. springMVC的拦截器工作流程

    首先,springmvc的拦截器配置在这就不多说了.主要讲一下拦截器的三个方法的执行顺序. preHandle方法一定是最先执行的方法,如果它返回为false下面的方法均不执行. postHandle ...

  7. SpringMVC—Struts2拦截器学习网址整理

    引自:http://blog.csdn.net/wp1603710463/article/details/49982683 SpringMVC—Struts2拦截器学习网址整理 最近项目中遇到权限相关 ...

  8. 转 :关于springmvc使用拦截器

    原博客: http://elim.iteye.com/blog/1750680 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的 ...

  9. springmvc中拦截器与springmvc全局异常处理器的问题

    最近在做一个练手的小项目, 系统架构中用了springmvc的全局异常处理器, 做了系统的统一异常处理. 后来加入了springmvc的拦截器, 为了一些需求, 在拦截器中的 preHandle 方法 ...

随机推荐

  1. VMware 搭建linux虚拟机环境

    1.任务管理器-服务 确认VMware服务是否启动 2.VMware生成网关地址 编辑--虚拟网络编辑器 VMnet8 NAT设置子网IP,子网掩码,网关 3.windows网络--更改适配器设置-- ...

  2. 多对多三种创建方式、forms组件、cookies与session

    多对多三种创建方式.forms组件.cookies与session 一.多对多三种创建方式 1.全自动 # 优势:不需要你手动创建第三张表 # 不足:由于第三张表不是你手动创建的,也就意味着第三张表字 ...

  3. 508,css优先级算法如何计算?

    优先级就近原则,同权情况下样式定义最近者为准 载入样式以最后载入的定位为准 优先级:!important>id > class >tag;  !important比内联优先级高 (百 ...

  4. Jmeter 测试结果分析之聚合报告简介

    聚合报告(aggregate report) 对于每个请求,它统计响应信息并提供请求数,平均值,最大,最小值,错误率,大约吞吐量(以请求数/秒为单位)和以kb/秒为单位的吞吐量. 吞吐量是以取样目标点 ...

  5. samba文件共享及账户映射

    samba文件共享及账户映射 实验介绍:在虚拟机Linux系统上安装sanmba服务,并在另外一台虚拟机的win7系统上访问共享文件夹,主要分为:匿名访问.身份验证访问.以及添加白名单和为了保护服务器 ...

  6. Intersection over Union(IoU) algorithms

    IoU算法可用与评估两个多维度数据的相似度,举一个实际应用,做CV,目标检测,我们需要评估模型的识别准确率,不同于二元类问题,普通的评估算法不合适,于是用到了这个算法,这个算法简单易懂,评估效果也不错 ...

  7. vnpy源码阅读学习(5):关于MainEngine的代码阅读

    关于MainEngine的代码阅读 在入口文件中,我们看到了除了窗体界面的产生,还有关于MainEngine和EventEngin部分.今天来学习下MainEngine的代码. 首先在run代码中,我 ...

  8. anacondaPython3.7退回到Python3.6

    https://blog.csdn.net/Fhujinwu/article/details/85851587

  9. 07-Docker-Image深入理解

    目录 07-Docker-Image深入理解 参考 镜像简介 什么是Docker镜像 什么是Docker容器 镜像结构 镜像特性 镜像层 容器层 镜像存储 07-Docker-Image深入理解 Do ...

  10. Python - 查看类的方法和属性,dir(),help()

    1. dir()查看类的方法和属性 查看slice类的方法和属性 dir(slice) 2.help() 查看某个方法的文档 查看slice类中的indices方法 help(slice.indice ...