Spring Boot:Web开发之三大组件的整合
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Resource
private MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor)
.addPathPatterns("/**") // 拦截所有请求路径
.excludePathPatterns("/login", "/error"); // 排除登录和错误处理路径
}
@Bean
public MyInterceptor myInterceptor() {
return new MyInterceptor();
}
private static class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// 在请求处理之前进行调用(Controller方法调用之前)
System.out.println("拦截器:请求处理之前");
return true; // 如果返回false,则停止流程,api不会被调用
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
// 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
System.out.println("拦截器:请求处理之后");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
// 在整个请求结束之后调用,也就是在DispatcherServlet渲染了视图执行
System.out.println("拦截器:请求结束");
}
}
}
这个代码示例展示了如何在Spring Boot项目中定义一个Web配置类实现WebMvcConfigurer
接口,并注册自定义拦截器。同时,我们定义了一个简单的拦截器MyInterceptor
,它实现了HandlerInterceptor
接口。在这个拦截器中,我们打印了一些信息来跟踪请求的生命周期。这是一个典型的Spring MVC拦截器的使用场景。
评论已关闭