Springmvc之拦截器

Springmvc之拦截器

一、概述

SpringMVC 中的 Interceptor 拦截器是非常重要和相当有用的,它的主要作用是拦截指定 的用户请求,并进行相应的预处理与后处理。其拦截的时间点在“处理器映射器根据用户提 交的请求映射出了所要执行的处理器类,并且也找到了要执行该处理器类的处理器适配器, 在处理器适配器执行处理器之前”。当然,在处理器映射器映射出所要执行的处理器类时, 已经将拦截器与处理器组合为了一个处理器执行链,并返回给了中央调度器

二、一个拦截器的执行

2.1 自定义拦截器


自定义拦截器,需要实现 HandlerInterceptor 接口。而该接口中含有三个方法: 

 preHandle(request, response, Object handler):  该方法在处理器方法执行之前执行。其返回值为 boolean,若为 true,则紧接着会执行处理器方 法,且会将 afterCompletion()方法放入到一个专门的方法栈中等待执行。 

 postHandle(request, response, Object handler, modelAndView):  该方法在处理器方法执行之后执行。处理器方法若最终未被执行,则该方法不会执行。 由于该方法是在处理器方法执行完后执行,且该方法参数中包含 ModelAndView,所以该方法可以修改处理器方法的处理结果数据,且可以修改跳转方向。 

 afterCompletion(request, response, Object handler, Exception ex):  当 preHandle()方法返回 true 时,会将该方法放到专门的方法栈中,等到对请求进行响应的所有 工作完成之后才执行该方法。即该方法是在中央调度器渲染(数据填充)了响应页面之后执行的,此 时对 ModelAndView 再操作也对响应无济于事。  

拦截器中方法与处理器方法的执行顺序如下图: 


换一种一表现方式,也可以这样理解: 


2.2 注册拦截器


<mvc:mapping/>用于指定当前所注册的拦截器可以拦截的请求路径,而/**表示拦截所 有请求。 

2.3 修改index页面


2.4 修改处理器


2.5 输出结果


三、多个拦截器的执行

3.1 概述

当有多个拦截器时,形成拦截器链。拦截器链的执行顺序,与其注册顺序一致。需要再 次强调一点的是,当某一个拦截器的 preHandle()方法返回 true 并被执行到时,会向一个专 门的方法栈中放入该拦截器的 afterCompletion()方法。 

只要有一个 preHandle()方法返回 false,则上部的执行链将被断开, 其后续的处理器方法与 postHandle()方法将无法执行。但,无论执行链执行情况怎样,只要 方法栈中有方法,即执行链中只要有 preHandle()方法返回 true,就会执行方法栈中的 afterCompletion()方法。最终都会给出响应。 


四、权限拦截器举例

4.1 需求分析

只有经过登录的用户方可访问处理器,否则,将返回“无权访问”提示。  本例的登录,由一个 JSP 页面完成。即在该页面里将用户信息放入 session 中。也就是 说,只要访问过该页面,就说明登录了。没访问过,则为未登录用户。 

4.2 修改index页面


4.3 定义Controller


4.4 定义welcome页面


4.5 定义权限拦截器

当 preHandle()方法返回 false 时,需要使用 request 或 response 对请求进行响应。 


4.6定义fail页面


4.7 注册拦截器


4.8 定义login页面


4.9 定义logout页面



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值