SpringMVC拦截器详情与案例

Spring MVC中的拦截器主要用于拦截用户请求并做出相对应事务处理,拦截器的应用场景有权限验证、记录请求信息的日志、判断用户是否登录。

拦截器的定义

  1. 实现HandlerInterceptor接口(用的最多)
  2. 实现WebRequestInterceptor接口

1. HandlerInterceptor拦截方法

    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }

    default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    }

    default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    }
  1. preHandle:

preHandler会在控制器方法执行前执行,我们发送一个控制器请求url,最终在adapter调用controller方法,在执行adapter之前就执行praHandle方法。返回值为boolean值,表示是否中断或者说继续后面的操作,如果返回值为true表示,表示springmvc的工作流程继续往下面走,如果为fasle就不走了。在拦截器对请求处理完成之后,还要调用其他的拦截器或者还要进行其他业务处理,那么就设置返回值为true,如果这一地方出了问题,比如权限验证没有通过,那么就为false。

  1. postHandle:

在控制器方法调用之后,在视图解析对象之前执行,可以对modelAndView做一些修改动作,

  1. afterCompletion:

在所有的请求完成,包括视图渲染,来执行这个afterCompletion方法,可以用这个方法做资源清理、日志记录。

2. 拦截器配置

xml文件配置拦截器

    <mvc:interceptors>
        <bean class="cn.gp.mvc.MvcController"/>
        <mvc:interceptor>
            <mvc:mapping path="/mvc"/>
            <bean class="cn.gp.mvc.MvcController"/>
        </mvc:interceptor>
    </mvc:interceptors>

3. 拦截器的执行顺序

分为两种情况,第一种情况是在开发过程中只有一个拦截器,第二种情况,开发过程中存在多个拦截器;

单个拦截器:

多个拦截器:

4. 拦截器的简单案例

public class mvcInterceptor1 implements HandlerInterceptor {

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("执行了"+this.getClass().getSimpleName()+"的preHandle=======================");
        return true;
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        System.out.println("执行了"+this.getClass().getSimpleName()+"的postHandle=======================");
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        System.out.println("执行了"+this.getClass().getSimpleName()+"的afterCompletion=======================");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值