• springmvc18


    拦截器

    拦截器说明:

    1 拦截器是springmvc中的一种,需要实现HandlerInterceptor接口
    2 拦截器和过滤器类似,功能方向侧重点不同。过滤器是用来过滤请求参数,设置编码字符集等。
    拦截器是拦截用户的请求,可以对多个Controller做拦截。
    3 拦截器是全局的,可以对多个Controller做拦截。
    一个项目中可以有0个或多个拦截器,他们在一起拦截用户的请求。
    拦截器常用在:用户登录处理,权限检查,记录日志。
    1
    2
    3
    4
    5
    6

    拦截器的使用步骤:

    1 定义普通类实现HandlerInterceptor接口,实现接口的三个方法
    2 在springmvc文件中,声明拦截器,指定拦截请求的uri地址
    1
    2

    拦截器的执行时间:

    1 在请求处理之前,也就是controller类中方法执行之前先被拦截
    2 在控制器方法执行之后也会执行拦截器
    3 在请求处理完成后也会执行拦截器
    1
    2
    3

    在主配置文件sprinmvc.xml中,声明拦截器

    <!--声明拦截器:拦截器可以有0个或者多个-->
    <mvc:interceptors>

    <!--声明一个拦截器-->
    <mvc:interceptor>
    <!--
    指定拦截请求的uri地址
    path:就是uri地址,可以使用通配符 **
    **:表示任意字符,文件或者多级目录中的文件
    -->
    <mvc:mapping path="/**"/>
    <!--声明拦截器对象-->
    <bean class="com.zh.handler.MyInterceptor"/>
    </mvc:interceptor>

    </mvc:interceptors>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    创建一个MyInterceptor.java,作为拦截器类,继承自HandlerInterceptor,实现三个方法:preHandle,postHandle,afterCompletion

    preHandle:预处理方法(重要)
    预处理方法:preHandle

    重要:是整个项目的入口,门户
    当preHandle返回true,请求可以被处理
    当preHandle返回false,请求到此方法就截止

    参数:Object handler:被拦截的控制器对象
    返回值:boolean

    true:请求通过拦截器验证,可以处理拦截器方法

    控制台显示结果:
    MyInterceptor拦截器的preHandle()方法执行了!
    MyController控制器的doSome()方法执行!
    MyInterceptor拦截器的postHandle()方法执行了!
    MyInterceptor拦截器的afterCompletion()方法执行了!

    false:请求没有通过拦截器的验证,请求到达拦截器就截止了。请求没有被处理

    控制台显示结果:
    MyInterceptor拦截器的preHandle()方法执行了!

    特点:
    1、该方法在控制器方法(MyController的doSome)之前执行,用户请求首先到达该方法
    2、在该方法中可以获取请求的信息,验证请求是否符合要求。可以验证用户是否登录,验证用户是否有权访问某个连接地址(url),
    如果验证失败,可以截断请求;如果验证成功,可以放行请求,此时控制器方法才能执行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27

    MyInterceptor.java

    //拦截器类:看作是多个控制器中公用的功能,集中到拦截器统一处理,使用的是aop思想(面向切面编程)。
    public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    System.out.println("MyInterceptor拦截器的preHandle()方法执行了!");
    return true;
    }

    /*
    * 后处理方法:postHandle
    * 参数:
    * Object handler:被拦截的处理器对象MyController
    * ModelAndView mv:处理器方法的返回值
    *
    * 特点:
    * 1、在处理器方法(MyController.doSome)之后执行
    * 2、能够获取到处理器方法的返回值ModelAndView,可以修改ModelAndView中的数据和视图,会影响到最后的输出结果
    * 3、主要是对原来的执行结果做第二次修正
    * */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mv) throws Exception {
    System.out.println("MyInterceptor拦截器的postHandle()方法执行了!");
    }

    /*
    * 最后执行方法:afterCompletion
    * 参数:
    * Object handler:被拦截的处理器对象
    * Exception ex:程序中发生的异常
    * 特点:
    * 1、在请求处理完成后执行。框架中规定是你的视图处理完成后,对视图执行了forward。就认为请求处理完成。
    * 2、一般做资源回收,程序请求中创建的一些对象,在这里删除,回收占用的内存
    *
    * */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    System.out.println("MyInterceptor拦截器的afterCompletion()方法执行了!");
    }
    }
    1


  • 相关阅读:
    吐血巨献:VB网络编程(webbrowser+Inet+抓包封包+经验)
    亦思验证码识别系统3.1详解
    开机自动连接宽带程序
    轻松报选修智能报选修程序(适用于正方教学管理系统)
    低调发布一个百度谷歌关键字搜索工具
    解惑:Postmessage函数模拟鼠标单击指定坐标
    分享一些经典资源
    英文单词缩写查询
    css控制的个性导航栏
    导航栏中加入自动弹出下拉菜单
  • 原文地址:https://www.cnblogs.com/huaobin/p/14908589.html
Copyright © 2020-2023  润新知