SpringBoot 拦截器(Interceptor)详解
Spring Boot中的拦截器(Interceptor)是一种基于AOP(面向切面编程)的技术,用于在Controller的方法调用前后执行一些特定的逻辑。
要在Spring Boot中创建一个拦截器,你需要实现HandlerInterceptor
接口。以下是一个简单的示例:
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在请求处理之前进行调用(Controller方法调用之前)
System.out.println("Pre Handle");
return true; // 如果返回false,则停止流程,api不会被调用
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
System.out.println("Post Handle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 在整个请求结束之后调用,也就是在DispatcherServlet渲染了视图执行
System.out.println("After Completion");
}
}
要让拦截器生效,你需要将其注册到Spring MVC的拦截器链中。这可以通过配置一个WebMvcConfigurer
实现类来完成:
import org.springframework.beans.factory.annotation.Autowired;
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 WebConfig implements WebMvcConfigurer {
@Autowired
private MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor)
.addPathPatterns("/**"); // 这里可以配置拦截器作用的路径
//.excludePathPatterns("/path/to/exclude"); // 配置排除的路径
}
}
在上述配置中,addPathPatterns("/**")
表示拦截所有的请求路径,你可以根据实际需求配置需要拦截的路径。excludePathPatterns("/path/to/exclude")
用于配置不需要拦截的路径。
以上代码实现了一个简单的Spring Boot拦截器,并展示了如何注册和配置它以便它能够拦截所有的请求。
评论已关闭