spring boot 实现多个 interceptor 并指定顺序

本文详细介绍了如何在Spring MVC中使用拦截器(Interceptor),包括创建自定义拦截器如MyInterceptor、UserInterceptor和StudentInterceptor,以及如何通过实现WebMvcConfigurer将这些拦截器加入到项目的请求处理流程中。文章还解释了拦截器执行的顺序及其在请求处理过程中的作用。

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

首先我们创建Interceptor,实现HandlerInterceptor覆写方法:
一、下面我创建了三个拦截器:
MyInterceptor,UserInterceptor,StudentInterceptor

@Component
public class MyInterceptor implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		System.out.println("MyInterceptor preHandle");
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
		System.out.println("MyInterceptor postHandle");
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
		System.out.println("MyInterceptor afterCompletion");
	}
}
@Component
public class StudentInterceptor implements HandlerInterceptor {


	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		System.out.println("StudentInterceptor preHandle");
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
		System.out.println("StudentInterceptor postHandle");

	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
		System.out.println("StudentInterceptor afterCompletion");

	}
}
@Component
public class UserInterceptor implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

		System.out.println("UserInterceptor preHandle");
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
		System.out.println("UserInterceptor postHandle");
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
		System.out.println("UserInterceptor afterCompletion");
	}
}

二、把拦截器加入到拦截器队列 实现WebMvcConfigurer

@Configuration
public class MyAdapter implements WebMvcConfigurer {

	@Resource
	private MyInterceptor myInterceptor;

	@Resource
	private UserInterceptor userInterceptor;

	@Resource
	private StudentInterceptor studentInterceptor;

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		//1.加入的顺序就是拦截器执行的顺序,
		//2.按顺序执行所有拦截器的preHandle
		//3.所有的preHandle 执行完再执行全部postHandle 最后是postHandle
		registry.addInterceptor(studentInterceptor).addPathPatterns("/**");
		registry.addInterceptor(myInterceptor).addPathPatterns("/**");
		registry.addInterceptor(userInterceptor).addPathPatterns("/**");

	}
}

三、最后访问controller

@RestController
public class TestController {

	@RequestMapping("/test")
	public String test() {
		return "test";
	}
	
}

在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值