1 创建一个实现了HandlerInterceptor接口的拦截器类,比如LoggingInterceptor,重写preHandle()、postHandle()和afterCompletion()方法,添加你需要的逻辑
@Component
public class LoggingInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在请求处理前执行
System.out.println("preHandle method is called");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 在请求处理后执行
System.out.println("postHandle method is called");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 在请求完成后执行
System.out.println("afterCompletion method is called");
}
}
在配置类中使用addInterceptors()方法来注册拦截器,并指定要拦截的URL模式。
@Configuration
publicclassWebConfigimplementsWebMvcConfigurer {
@Autowired
private LoggingIntercepto projectInterceptor;
@OverridepublicvoidaddInterceptors(InterceptorRegistry registry) {
// 注册拦截器,并指定要拦截的URL模式为“/”
registry.addInterceptor(projectInterceptor).addPathPatterns("/");
}
}
值得注意的是使用这种模式 resources下的static的文件可能不再被视为静态资源,最好在添加资源管理器。
所以再进一步进行优化
@Configuration
@Slf4j
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Autowired
private LoggingIntercepto projectInterceptor;
@Override
protected void addInterceptors(InterceptorRegistry registry) {
System.out.println("添加拦截器 成功");
registry.addInterceptor(projectInterceptor).addPathPatterns("/backend/index.html");
}
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 添加自定义的静态资源映射路径,第一个参数是访问路径前缀,第二个参数是文件存放路径
registry.addResourceHandler("/backend/**").addResourceLocations("classpath:static/backend/");
}
}