SpringBoot添加拦截器

本文介绍了如何在SpringBoot中创建和配置拦截器。首先,需要实现HandlerInterceptor接口并实现其方法,注意preHandle的返回值影响后续流程。接着,通过实现WebMvcConfigurer接口的addInterceptors方法来配置拦截器。最后,如果需要添加多个拦截器,只需创建并添加多个拦截器实例到配置中。

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

1、创建拦截器

实现  HandlerInterceptor 接口,实现接口中的方法。

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

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

/**
 * 创建拦截器
 */
public class InterceptorConfig 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-------------");
	}
}

注意:

方法执行顺序:preHandle → Controller → postHandle → afterCompletion

只有 preHandle 方法返回 true 时,后面的方法才会执行。

2、配置拦截器

实现  WebMvcConfigurer 接口,实现  addInterceptors 方法。

import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 页面全局配置
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {

	/**
	 * 配置拦截器
	 */
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		/**
		 * addInterceptor:注册自定义的拦截器;
		 * addPathPatterns:需要拦截的路径;
		 * excludePathPatterns:排除拦截的路径
		 */
		registry.addInterceptor(new InterceptorConfig()).addPathPatterns("/**").excludePathPatterns("/test");
	}
}

3、添加多个拦截器

需要添加多个拦截器时,只需要创建多个拦截器,配置中加入即可。

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

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

/**
 * 创建拦截器1111
 */
public class InterceptorConfig implements HandlerInterceptor {

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

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

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
		System.out.println("-------------afterCompletion-1111------------");
	}
}
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

/**
 * 创建拦截器2222
 */
public class InterceptorTwoConfig implements HandlerInterceptor {

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

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

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
		System.out.println("-------------afterCompletion-2222------------");
	}
}
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 页面全局配置
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {

	/**
	 * 配置拦截器
	 */
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		/**
		 * addInterceptor:注册自定义的拦截器;
		 * addPathPatterns:需要拦截的路径;
		 * excludePathPatterns:排除拦截的路径;
		 * order:设置多个拦截器的执行顺序,数字越小越先执行
		 */
		registry.addInterceptor(new InterceptorConfig()).addPathPatterns("/**").excludePathPatterns("/test").order(2);
		registry.addInterceptor(new InterceptorTwoConfig()).addPathPatterns("/**").excludePathPatterns("/test").order(1);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值