Spring拦截器

SpringMVC提供了拦截器机制,允许运行目标方法之前进行一些拦截工作或者目标方法运行之后进行一下其他相关的处理。自定义的拦截器必须实现HandlerInterceptor接口。

preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求 request 进行处理。如果程序员决定该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去进行处理,则返回true;如果程序员决定不需要再调用其他的组件去处理请求,则返回false

postHandle():这个方法在业务处理器处理完请求后,但是DispatcherServlet 向客户端返回响应前被调用,在该方法中对用户请求request进行处理。

afterCompletion():这个方法在DispatcherServlet完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。

controller层:

springmvc.xml文件:

拦截器的执行顺序如下:

可以看到先执行拦截器的preHandle方法----》执行目标方法----》执行拦截器的postHandle方法----》执行页面跳转----》执行拦截器的afterCompletion方法

在配置拦截器的时候有两个需要注意的点:

1、如果prehandle方法返回值 为false,那么意味着不放行,那么就会造成后续的所有操作都中断

2、如果执行到方法中出现异常,那么后续流程不会处理但是afterCompletion方法会执行

2.定义多个拦截器

在创建一个类继承HandlerInterceptor

多个拦截器时执行的顺序

拦截器的preHandle是按照顺序执行的

拦截器的postHandle是按照逆序执行的

拦截器的afterCompletion是按照逆序执行的

如果执行的时候核心的业务代码出问题了,那么已经通过的拦截器的afterCompletion会接着执行。

拦截器似乎和过滤器相似,但可不能混为一谈

拦截器跟过滤器的区别

1、过滤器是基于函数回调的,而拦截器是基于java反射的

2、过滤器依赖于servlet容器,而拦截器不依赖与Servlet容器

3、连接器几乎对所有的请求都起作用和,而拦截器只能对action请求起作用

4、拦截器可以访问action的上下文,而过滤器不可以

5、在action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化的时候调用一次

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring框架中,拦截器是一种可以拦截请求并在处理请求之前或之后执行自定义逻辑的组件。它们可以用于实现身份验证、授权、日志记录等功能。下面是使用拦截器的步骤: 1. 创建一个类并实现`HandlerInterceptor`接口。 2. 在类中实现`preHandle`、`postHandle`和`afterCompletion`方法,分别在请求处理之前、请求处理之后和视图渲染完成后执行特定的逻辑。 3. 在配置文件中注册拦截器,并指定拦截的URL模式或特定路径。 以下是一个简单的例子: ```java public class CustomInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在请求处理之前执行的逻辑 return true; // 返回true继续处理请求,返回false终止请求处理 } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // 在请求处理之后但视图渲染之前执行的逻辑 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 在视图渲染完成后执行的逻辑 } } ``` 在配置文件中注册拦截器: ```xml <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <!-- 拦截所有URL --> <bean class="com.example.CustomInterceptor"/> </mvc:interceptor> </mvc:interceptors> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值