SpringBoot实现拦截器

1.概述

拦截器属于 Spring MVC 中的内容,能够在Controller中的方法执行前、后进行额外的逻辑处理,常用于权限控制、日志记录、接口幂等性校验、数据校验、缓存处理等场景。

2.快速开始

0)SpringBoot基本环境搭建
1)自定义拦截器,实现HandlerInterceptor接口

public class TestInterceptor implements HandlerInterceptor {
	// 预处理方法,在Controller方法执行前执行。返回true则放行,继续执行controller方法;返回false则不放行,可由request或response跳转
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		System.out.println("拦截器:预处理方法");
		return true;
	}

	// 后处理方法,在Controller方法执行后执行
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
		System.out.println("拦截器:后处理方法");
	}

	// 成功返回页面后执行
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
		System.out.println("拦截器:页面响应完成");
	}
}

2)注册拦截器到InterceptorRegistry,并配置拦截路径

// 新建配置类(注意加@Configuration注解),实现WebMvcConfigurer接口,并重写addInterceptors()方法
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new TestInterceptor())  // 注册拦截器到InterceptorRegistry,使其生效
				.addPathPatterns("/hello")  // 拦截器拦截的路径
				.excludePathPatterns("");  // 拦截器放行的路径
	}
}

3)效果展示
本地启动项目,访问http://localhost:8080/hello,控制台打印如下

拦截器:预处理方法
执行controller中的方法:hello
拦截器:后处理方法
拦截器:页面响应完成

3.拦截器的实际应用(TODO)

4.用户请求的执行顺序

请求进入容器 > 进入过滤器 > 进入 Servlet > 进入拦截器 > 执行控制器(Controller),如下图所示(图片来自参考[2]):
用户请求执行顺序图片来自参考2

5.使用拦截器的注意事项

1)减少拦截器数量:尽量将相关功能集中到一个拦截器中,避免创建过多的拦截器。
2)精确配置拦截规则:通过addPathPatterns和excludePathPatterns方3)法精确配置拦截规则,避免不必要的拦截。
4)使用异步处理:在拦截器中使用异步处理,避免阻塞请求处理过程。
5)使用缓存:在拦截器中使用缓存,减少对数据库或其他资源的访问。

参考

[1] 全面了解SpringBoot拦截器
[2] 过滤器和拦截器有什么区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot实现拦截器的过程可以参考中提供的详细示例代码解析。在Spring Boot中,可以通过创建一个自定义的拦截器类来实现拦截功能。拦截器类需要实现Spring框架中的HandlerInterceptor接口,并重写其中的方法。 首先,需要创建一个拦截器类,该类需要实现HandlerInterceptor接口,并重写其中的preHandle、postHandle和afterCompletion方法。preHandle方法在请求处理之前执行,可以用于进行权限验证、日志记录等操作;postHandle方法在请求处理之后执行,可以对响应结果进行处理;afterCompletion方法在视图渲染之后执行,可以进行一些资源的清理操作。 接下来,需要在Spring Boot应用程序的配置类(通常是带有@SpringBootApplication注解的类)中注册拦截器。可以通过重写WebMvcConfigurer接口中的addInterceptors方法来实现。在该方法中,可以使用addInterceptor方法将自定义的拦截器类添加到拦截器链中,指定需要拦截的路径或排除的路径。 通过以上步骤,就可以实现拦截器Spring Boot应用中的使用了。拦截器会在请求到达控制器方法之前进行拦截,并执行拦截器类中定义的相关逻辑。 需要注意的是,拦截器Spring Boot中是针对Spring MVC的访问进行增强的,与Servlet技术中的过滤器(Filter)有所区别。拦截器通过动态拦截方法调用的机制来实现,而过滤器对所有访问进行增强。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值