SpringBoot2之拦截器

本文介绍了SpringBoot2中如何配置和使用拦截器,包括实现HandlerInterceptor接口或继承HandlerInterceptorAdapter,以及如何注册拦截器并指定拦截规则。讲解了拦截器的执行顺序,包括默认顺序和通过order方法调整顺序。示例代码展示了拦截器的实现和注册过程,适用于实现如登录权限控制和日志记录等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

SpringBoo2因为整合了SpringMVC,因此SpringMVC的拦截器也被SpringBoot收入囊中,拦截器(Interceptor)是SpringMVC的核心功能之一,是利用Spring的AOP面向切面编程的思想,可以很方便的实现对登录权限控制、日志打印等功能。



1、配置拦截器


1.实现HandlerInterceptor接口

HandlerInterceptor:处理器拦截器(SpringBoot的web开发中,使用controller来处理web请求,而HandlerInterceptor用来处理controller拦截)
实现HandlerInterceptor接口中三个方法:

  • preHandle:预先处理方法,返回值为false拦截,true放行,放行之后执行controller对应方法中的内容
  • postHandle:controller方法返回之后执行postHandle,执行完成之后开始响应页面
  • afterCompletion:当页面渲染完成之后执行afterCompletion
public class MyHandlerInterceptor implements HandlerInterceptor {

    /**
     * 目标方法调用之前执行
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return false;
    }


    /**
     * 目标方法调用完以后执行
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    /**
     * 页面渲染完以后执行
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

2.继承HandlerInterceptorAdapter类(不推荐使用)



2、将拦截器注册到容器中,并指定拦截规则

以前注册拦截器要写XMl文件,现在使用javaconfig注册拦截器:

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyHandlerInterceptor())
                .addPathPatterns("/**")      //拦截的路径
                .excludePathPatterns("/login"); //排除的路径
    }
}



3、多个拦截器的执行顺序


1. 默认拦截器的执行顺序

默认情况下,通过register.addInterceptor注册拦截器的顺序来确定拦截器的preHandle的执行顺序,preHandle 方法执行顺序与拦截器注册时顺序一致,postHandleafterCompletion 方法执行顺序反之在这里插入图片描述


2.修改拦截器的执行顺序

通过order(int order)方法设置拦截器执行的先后顺序,preHandle 方法执行顺序是按照 order 升序执行,postHandle 和 afterCompletion 方法执行顺序反之。

@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new Interceptor1())
                .addPathPatterns("/**")
                .order(1);

        registry.addInterceptor(new Interceptor2())
                .addPathPatterns("/**")
                .order(2);

        registry.addInterceptor(new Interceptor3())
                .addPathPatterns("/**")
                .order(3);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

springboot大神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值