springboot HandlerInterceptor
时间: 2023-11-03 11:22:48 浏览: 101
SpringBoot的拦截器
Spring Boot中的HandlerInterceptor是一个拦截器接口,用于在请求处理之前和之后进行拦截操作。它可以拦截请求并在处理器执行之前和之后执行自定义逻辑,比如日志记录、权限验证等。
要使用HandlerInterceptor,首先需要实现该接口,并实现其中的三个方法:
1. preHandle:在请求处理之前执行,返回true表示继续处理请求,返回false则终止请求处理流程。
2. postHandle:在请求处理之后、视图渲染之前执行,可以对ModelAndView进行操作。
3. afterCompletion:在整个请求处理完成后执行,主要用于清理资源等工作。
接下来,需要将自定义的HandlerInterceptor注册到Spring Boot的配置中。可以通过实现WebMvcConfigurer接口,并覆盖addInterceptors方法来添加自定义的拦截器。
以下是一个简单的示例代码:
```java
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 执行请求处理之前的逻辑
return true; // 返回true表示继续处理请求,返回false表示终止请求处理流程
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 执行请求处理之后、视图渲染之前的逻辑
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 整个请求处理完成后执行的逻辑,可以用于清理资源等工作
}
}
```
然后在配置类中注册这个拦截器:
```java
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyInterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
}
}
```
上述代码将自定义的拦截器添加到所有请求路径上。
这样,当有请求进来时,会先经过preHandle方法,然后执行请求处理器(Controller),再经过postHandle方法,最后经过afterCompletion方法。在这些方法中可以根据具体需求进行相应的处理和操作。
阅读全文