spring-boot拦截器

拦截器(Interceptor):是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行(类似有保安拦截检查,正常才通过)

  作用

在指定的方法调用前后执行预先设定的代码(比如权限的校验就是在访问controller之前校验)
阻止原始方法的执行(把原始的方法终止掉)

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

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

/**
 * 拦截器
 * @author THINK
 *
 */
public class LogCostInterceptor  implements HandlerInterceptor {
	private long start;
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		start = System.currentTimeMillis();
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		 System.out.println("Interceptor 耗时:"+(System.currentTimeMillis()-start));
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
	}
	
}

这里我们需要实现HandlerInterceptor这个接口,这个接口包括三个方法,preHandle是请求执行前执行的,postHandler是请求结束执行的,除了实现上面的接口外,我们还需对其进行配置:

import com.suke.springbootdemo1.intercept.LogCostInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 拦截器配置类
 * @author THINK
 *
 */
@Configuration
public class InterceptorConfig  implements WebMvcConfigurer {
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		//注册拦截器
		registry.addInterceptor(new LogCostInterceptor()).addPathPatterns("/**");
	}
}

拦截器与过滤器的区别

 归属不同:Filter属于Servlet技术,Interceptor属于SpringMVC技术
 拦截器内容不同:Filter对所有访问进行增强(在Tomcat服务器进行配置),Interceptor仅针对SpringMVC的访问进行增强

总结

在软件开发中,拦截器常常被应用于各种不同的框架和技术中,比如在Web开发中的Java Servlet中,Spring框架中的拦截器,以及在移动应用开发中的各种框架中。

拦截器模式的基本结构包括以下几个要素:

Handler(处理器):负责处理实际请求的组件,可以是一个对象、一个方法或者一个类。

Interceptor(拦截器):拦截器是一个包含预处理、后处理、完成后处理、异常处理等方法的接口。在拦截器中,开发者可以编写自己的逻辑来处理请求。

Interceptor链:拦截器链是由多个拦截器组成的链表,每个拦截器依次处理请求,然后将请求传递给下一个拦截器,直到所有拦截器处理完毕。

Client(客户端):负责生成请求的对象,将请求传递给拦截器链进行处理。

在一个典型的拦截器模式中,当一个请求被发起时,它会经过拦截器链中的所有拦截器,每个拦截器可以在请求的前、后或异常处理时执行特定的操作。这种方式使得系统的处理逻辑更加灵活,可以根据需要动态地增加、删除或修改拦截器,而不需要修改已有的处理器和客户端代码。

拦截器模式的优点包括了解耦、复用性高、易于扩展等。通过拦截器,可以将一些通用的功能从业务逻辑中分离出来,提高了代码的可维护性和可读性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值