将堆内存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. vue中用 async/await 来处理异步

    原文作者:https://www.cnblogs.com/SamWeb/p/8417940.html 昨天看了一篇vue的教程,作者用async/ await来发送异步请求,从服务端获取数据,代码很简 ...

  2. SQL过滤条件on和where

    在使用left jion时,会生成一张中间的临时表,然后再将这张临时表返回给用户. on和where条件的区别如下:1. on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表 ...

  3. Vue2.0 中,“渐进式框架”和“自底向上增量开发的设计”这两个概念是什么?(转)

    https://www.zhihu.com/question/51907207?rf=55052497 徐飞 在我看来,渐进式代表的含义是:主张最少. 每个框架都不可避免会有自己的一些特点,从而会对使 ...

  4. Nginx做缓存

    查看服务 netstat -lntp|grep 80 Nginx作为缓存WEB服务 通常情况下缓存是用来减少后端压力, 将压力尽可能的往前推, 减少后端压力,提高网站并发延时 Nginx代理缓存原理 ...

  5. git密码相关问题

    一.解决:每次都需要输入账号密码 git config --global credential.helper store 二.后期git密码更改后,重置密码操作 git config --system ...

  6. RHEL6-HA集群在VMware虚拟机环境安装配置文档

    (一)系统环境描述 本文档基于RHEL6u5 系统安装,配置为2节点高可用集群,节点为两台VMware虚拟机. 也可参考http://blog.51cto.com/ty1992/1325327 (二) ...

  7. wordpress 上传图片出现权限或者http错误

    首先上传图片的时候出现了 5.jpg 无法建立目录“wp-content/uploads”/2018/07.有没有上级目录的写权限? 然后啊,找方法啊 1.把var/www/wp-content/up ...

  8. 使用docker踩过的坑

    最近需要使用docker,但是win10电脑的系统不是docker windows适用版本,没法在windows上安装 于是就上centos虚拟机里面装了一个docker docker pull文件的 ...

  9. Travis CI Build Continuous Integration

    什么是持续集成 持续集成(Continuous Integration)是经常合并小的代码更改的实践,而不是在开发周期结束时合并大的更改.目的是通过以较小的增量开发和测试来构建更健康的软件.这就是Tr ...

  10. hadoop中block副本的放置策略

    下面的这种是针对于塔式服务器的副本的放置策略