当 springBoot 的版本从1.x 升级到 2 之后WebMvcConfigurerAdapter就发现这个抽象类已经过时了,因此才用以下2种写法
@Component
public class WebMvcConfg implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SessionInterceptor()).addPathPatterns("/user/*");
}
}
@Component
public class WebMvcConfg extends WebMvcConfigurationSupport {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SessionInterceptor()).addPathPatterns("/user/*");
}
因为第二种不兼容1.x版本,于是变采用了第一种写法。
拦截器代码
@Configuration
public class SessionInterceptor implements HandlerInterceptor {
/**
* controller 执行之前调用
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("------preHandle-----");
System.out.println(handler);
System.out.println(handler.getClass());
return true;
}
/**
* controller 执行之后,且页面渲染之前调用
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("------postHandle-----");
}
/**
* 页面渲染之后调用,一般用于资源清理操作
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("------afterCompletion-----");
}
}
测试结果:




根据打印结果发现,拦截有两种方式,method方法拦截和resource资源拦截,访问controller里面是方法拦截,直接访问static里面文件图片是资源拦截,spring5.0版本2种拦截已经整合

因此可以指定拦截的路径,防止拦截静态资源,也可以排除静态资源路径,只拦截方法
registry.addInterceptor(new SessionInterceptor()).addPathPatterns("/user/*");
或者
registry.addInterceptor(new SessionInterceptor())..excludePathPatterns("/static/*");
网友评论