Interceptor

This commit is contained in:
cuijiawang
2025-02-06 11:34:55 +08:00
parent 3f57d35d71
commit 61fd6cae54
4 changed files with 153 additions and 1 deletions

View File

@@ -28,9 +28,16 @@
<scope>provided</scope>
</dependency>
<!-- filter end -->
<!-- interceptor -->
<!-- <dependency>-->
<!-- <groupId>org.springframework</groupId>-->
<!-- <artifactId>org.springframework.web.servlet</artifactId>-->
<!-- <version>3.1.0.RELEASE</version>-->
<!-- </dependency>-->
<!-- interceptor end -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>

View File

@@ -0,0 +1,28 @@
package stu.base.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @Author cuiJiaWang
* @Create 2025-02-06 10:36
*/
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
// 在视图渲染之前执行的逻辑
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
// 请求完成后的逻辑,比如资源清理
}
}

View File

@@ -0,0 +1,100 @@
package stu.base.interceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.validation.Validator;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.*;
import java.util.List;
/**
* @Author cuiJiaWang
* @Create 2025-02-06 10:54
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry formatterRegistry) {
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
// //1.需要定义一个convert转换消息的对象;
// FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
// //2.添加fastJson的配置信息比如是否要格式化返回的json数据;
// FastJsonConfig fastJsonConfig = new FastJsonConfig();
// fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,
// SerializerFeature.WriteMapNullValue,
// SerializerFeature.WriteNullStringAsEmpty,
// SerializerFeature.DisableCircularReferenceDetect,
// SerializerFeature.WriteNullListAsEmpty,
// SerializerFeature.WriteDateUseDateFormat);
// //3处理中文乱码问题
// List<MediaType> fastMediaTypes = new ArrayList<>();
// fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
// //4.在convert中添加配置信息.
// fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);
// fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
// //5.将convert添加到converters当中.
// converters.add(fastJsonHttpMessageConverter);
}
@Override
public Validator getValidator() {
return null;
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> list) {
}
@Override
public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> list) {
}
@Override
public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> list) {
}
@Override
public void addInterceptors(InterceptorRegistry interceptorRegistry) {
interceptorRegistry.addInterceptor(new MyInterceptor())
.addPathPatterns("/**");
}
@Override
public void addViewControllers(ViewControllerRegistry viewControllerRegistry) {
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("/swagger-resources/**")
.addResourceLocations("classpath:/META-INF/resources/swagger-resources/");
registry.addResourceHandler("/swagger/**")
.addResourceLocations("classpath:/META-INF/resources/swagger*");
registry.addResourceHandler("/v2/api-docs/**")
.addResourceLocations("classpath:/META-INF/resources/v2/api-docs/");
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer defaultServletHandlerConfigurer) {
}
}

View File

@@ -0,0 +1,17 @@
## Interceptor
### 什么是 Interceptor
Interceptor 是一种特殊的 Handler它允许你拦截消息的传递并做出一些自定义的处理主要目的是为了减少重复代码用于大量的程序预处理工作。
`Interceptor``Spring MVC` 框架的一部分,是位于`org.springframework.web.servlet`包中的`HandlerInterceptor`接口,用于在请求处理之前或之后执行特定逻辑。与`Filter`不同的是,`Interceptor`不依赖于`Servlet`容器,它是 Spring 框架独有的。
### 执行顺序
![图片](https://erism.oss-cn-hangzhou.aliyuncs.com/img/640)
`postHandle` 是按照`Interceptor` 链**逆序执行**的
![图片](https://mmbiz.qpic.cn/sz_mmbiz_jpg/Sibr1V72JEHGfYBl61CFeoEJiaXFKHb7dU6aTjqAXPm6VgJSS1ibq1icWMLojetf0GaVIKv8nk4cKz3FFpUKIDw6BQ/640)