Springmvc拦截器

拦截器的概述

 Spring MVC的拦截器(Interceptor) 与Java Servlet的过滤器(Filter) 类似,它
主要用于拦截用户的请求并做相应的处理。通常应用在权限验证、记录请求信息的日
志、判断用户是否登录等功能上。
拦截器与过滤器区别:
①拦截器是基于java的反射机制的,而过滤器是基于函数回调。
②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始
化时被调用一次。
⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,拦截器里可以注
入一个service,可以调用业务逻辑。
  • 拦截器的定义

在Spring MVC框架中,定义一个拦截器,需要对拦截器进行定义和配置。定义一个拦截
拦截器之会拦截访问的控制器方法,如果访问了jsp/HTML/CSS/image/js
是不会进行拦截的
器可以通过两种方式:一种是通过实现HandlerInterceptor接口或继承HandlerInterceptor
接口的实现类来定义;另一-种是通过实现WebRequestlnterceptor接C或继承
WebRequestInterceptor接口的实现类来定义。本章以实现HandlerInterceptor接口的定义
​
方式为例,讲解自定义拦截器的使用方法。
import javax.servlet.http.HttpServletRequest;
public class TestInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exceptioro{
System. out.println(" preHandle方法在控制器的处理请求方法前执行");
/**返回true表示继续向下执行,返回false表示中断后续的操作*/
return true;}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.outprintln("postHandle方法在控制器的处理请求方法调用之后,解析视图之前执行");}
@Overridel
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System. outprintIn("afterCompletion方法在控制器的处理请求方法执行完成后执行,即视图渲染结束之后执行");}
​
在上述拦截器的定义中,实现了HandlerInterceptor接口,
并实现了接口中的三个方法。有关这三个方法的描述如下。
preHandle()方法:该方法在控制器的处理请求方法前执行
其返回值表示是否中断后续操作。返回true表示继续向下执
行,返回false表示中断后续操作。
postHandle()方法:该方法在控制器的处理请求方法调用之
后,解析视图之前执行。可以通过此方法对请求域中的模型和
视图做进一步的修改。
afterCompletion()方法:该方法在控制器的处理请求方法
执行完成后执行,即视图渲染结束后执行。可以通过此方法实
现- -些资源清理、记录日志信息等工作。
​

  • 拦截器的配置

    <mvc:interceptors>
    <!--配置-个全局拦截器,拦截所有请求-->
    sbean class= "interceptor. TestInterceptor "/>
    <mvc:interceptor>
    r
    <!--配置拦截器作用的路径-->
    <mvc:mapping path= "/**/>
    <!--定义在<mvc:interceptor>元素中,表示匹配指定路径的请求才进行拦截-->
    <bean class= "interceptor.Interceptor1 "/>
    历
    </mvc:interceptor>
    < mvc:interceptor>
    <!--配置拦截器作用的路径-->
    <mvc:mapping path= "/gotoTest"/>
    <!--定义在<mvc:interceptor>元素中,表示匹配指定路径的请求才进行拦截-->
    va
    <bean class= "interceptor./nterceptor2"/>
    </mvc:interceptor>
    </mvc:interceptors>
    梦山明呆凹uvuypaussa
    执行元成后执行,即视图渲染结束后执行。可以通过此方法买

  • 拦截器的执行流程

单个拦截器的执行流程
在配置文件中,如果只定义了一个拦截器,程序首先将执行
拦截器类中的preHandle()方法,如果该方法返回true,程序将
继续执行控制器中处理请求的方法,否则中断执行。如果
preHandle()方法返回true,并且控制器中处理请求的方法执行
后返回视图前,将执行postHandle()方法。返回视图后,才执
行afterCompletion()方法.

  

<mvc:interceptors>
<!--配置-个全局拦截器,拦截所有请求-->
<bean class= "interceptor. TestInterceptor"/>
t </mvc:interceptors>
二月02, 2020 12:03:56上午org.springframework.web.servlet.PageNotFound noHandle
警告: No mapping found for HTTP request with URI VDemo/] in DispatcherServlet with
preHandle方法在控制器的处理请求方法前执行
正在测试拦截器,执行控制器的处理请求方法中
postHandle方法在控制器的处理请求方法调用之后,解析视图之前执行
视图渲染结束。
afterCompletion方法在控制器的处理请求方法执行完成后执行,即视图渲染结束之后执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值