SpringMVC中的拦截器详解

1

什么拦截器?

SpringMVC中的拦截器类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等等。

2897b4f2607289b192e59e8e0fbfa6d8.gif

2

如何使用拦截器?

总体:先进行定义后配置

第一步:定义(两种方式)

d8c00c9935b50db3d86447f026783e46.png

这里介绍第一种:

f3aea68527b86989a84c29c958d845fc.png

Pre在控制器方法前执行,返回值为boolean类型,true继续向下执行,否则中断后续所有操作。

Post在调用控制器方法之后,解析视图之前执行,可通过此方法对请求域中的模型和视图做进一步修改。

After在渲染视图之后执行,资源清理,记录日志。

5db8b17d5f3acb8ed0475392b6804794.png

第二步:在SpringMVC的配置文件中进行配置了。

a13fe7b5876b60d40d8d364903d0cddf.png

第一个bean:全局拦截器,拦截所有请求。

Mapping path:配置拦截路径,/**表示拦截所有路径,/hello表示拦截以/hello结尾的路径。

Exclude-mapping path:配置不需要拦截的路径

注:一个<mvc :interceptor></mvc :interceptor>块中,子元素的配置顺序应按照上述代码编写。

c41867c189b4d0126e847eae38a3fd79.gif

3

拦截器的执行流程

  1. 单个拦截器:

    376b3bff2420017e2345e570815362d3.png

    9a28e7764300215cb2bcd5fa5fcff684.png

  2. 多个拦截器:

8c7e28a0ea161d5a7812ec8b3ca6fe03.png

在执行preHandle之前,先执行拦截器1,返回true再执行拦截器2,执行完控制器方法之后,先执行拦截器2的postHandle再执行拦截器1的postHandle,渲染完视图后,先执行拦截器2的afterCompletion再执行拦截器1的afterCompletion。

注:在执行完控制器方法之后,其使用拦截器的顺序类似栈的后进先出。

2210c4b6c514212d50e78a6e53453af0.gif

4

应用案例:

7f80290f6ced7b8f2add7f01cbfbc805.png

  1. 首先导入相应jar包,创建模型User类,控制器UserController类,拦截器LoginInterceptor类,以及相对应的视图login.jsp和main.jsp和相应的配置文件。

  2. 控制器类UserController包含四个方法,分别是登录、注销、转到登录界面,转到主界面。

    e799156e20a568a7259244b8e50634b6.png

  3. 拦截器因为要对未登录用户进行拦截,以防止直接绕过登录进入main界面,所以需要在控制器方法执行之前进行拦截,即需要在preHandle设置。设置的步骤,首先获取URL是否是login,如果是直接返回true。其次,获取session,判断是否存在用户登录数据,如果有,即返回true,若没有,即判断为想绕过登录进入界面的行为,此时,给出提示信息,并转发到登录界面。同时返回false。

  4. 最后,在SpringMVC配置文件中配置拦截器。

    16e92fbd241ed1c1f62c90e5d0358765.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT学习小镇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值