SpringMVC 拦截器

目录

1 拦截器简介

1.1什么是拦截器

1.2拦截器执行流程

1.3拦截器和过滤器的区别

2 定义拦截器

2.1.1 preHandle 方法

 2.1.2 postHandle 方法

2.1.3 afterCompletion 方法

3.创建拦截器

3.1 编写拦截器代码

3.2 编写拦截器配置文件

4  定义全局拦截器

4.1 拦截器代码(略)

4.2 编写全局拦截器配置

5 多拦截器执行顺序


1 拦截器简介

1.1什么是拦截器

Spring MVC 的拦截器( Interceptor )与 Servlet 的过滤器( Filter )类似,它主要用于拦
截用户的请求并做相应的处理,通常应用在权限验证、记录请求信息的日志、判断用户是否
登录等功能上。

1.2拦截器执行流程

1.3拦截器和过滤器的区别

 拦截器 SpringMVC 组件,而过滤器是 Servlet 组件。
 拦截器不依赖容器,过滤器依赖容器。
 拦截器只能对控制器请求起作用,而过滤器则可以对所有的请求起作用。
 拦截器可以获取 IOC 容器中的各个 bean ,而过滤器就不太方便。

2 定义拦截器

HandlerInterceptor 接口中包含了三个抽象方法,分别表示拦截的时间点。

2.1.1 preHandle 方法

该方法在控制器的处理请求方法前执行,其返回值表示是否中断后续操作,返回 true
表示继续向下执行,返回 false 表示中断后续操作

 2.1.2 postHandle 方法

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

2.1.3 afterCompletion 方法

该方法在控制器的处理请求方法执行完成后执行,即视图渲染结束后执行,可以通过此
方法实现一些资源清理、记录日志信息等工作。

3.创建拦截器

3.1 编写拦截器代码

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("PreHandle: 在处理请求的目标方法执行之前");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle: 目标方法执行后,视图解析器处理视图之前");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion: 为客户端产生响应之前。");
    }
}

3.2 编写拦截器配置文件

需要在 SpringMVC 的配置文件中,通过 <mvc:interceptors> 标签配置拦截器
<!-- 配置拦截器 -->
< mvc :interceptors >
< mvc :interceptor >
<!-- mapping: 配置拦截器的作用路径 -->
< mvc :mapping path ="/**" />
<!-- 配置不需要拦截的作用路径 -->
< mvc :exclude-mapping path ="/user/getUsers" />
< bean class ="com.star.interceptor.MyInterceptor" />
</ mvc :interceptor >
</ mvc :interceptors >

 定义全局拦截器

全局拦截器是指可以拦截所有被控制器所处理 URL 。作用等同于 /**

4.1 拦截器代码(略)

和普通拦截器一样,只是配置不同

4.2 编写全局拦截器配置

<!-- 配置拦截器 -->
< mvc :interceptors >
<!-- 配置全局拦截器 -->
< bean class ="com.star.interceptor.GlobalInterceptor" /> < mvc :interceptor >
<!-- mapping: 配置拦截器的作用路径 -->
< mvc :mapping path ="/**" />
<!-- 配置不需要拦截的作用路径 -->
<!--<mvc:exclude-mapping path="/user/getUsers"/>-->
< bean class ="com.star.interceptor.MyInterceptor" />
</ mvc :interceptor >
</ mvc :interceptors >

多拦截器执行顺序

如果一个 URL 能够被多个拦截器所拦截,全局拦截器最先执行,其他拦截器根据配置
文件中配置的上下顺序来决定执行顺序的。先配置谁, 谁就先执行。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值