这里首先实现HandlerInterceptor接口,进行拦截业务操作:
@Component
public class UserInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
//进行拦截判断,return true放行,反之拦截
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) throws Exception {
}
}
再创建一个类,继承WebMvcConfigurationSupport,进行拦截路径的设置:
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseSuffixPatternMatch(false);
}
/**
* Add intercepter
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new UserInterceptor())
.excludePathPatterns("/register","/login") //放行路径
.addPathPatterns("/**"); //拦截路径
}
//添加资源路径,否则无法渲染页面
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
registry.addResourceHandler("/static/**").addResourceLocations(
"file:./views/" + siteConfig.getTheme() + "/static/",
"classpath:/" + siteConfig.getTheme() + "/static/");
}
// @Override
// protected void addCorsMappings(CorsRegistry registry) {
// registry.addMapping("/**")
// .allowedOrigins("*")
// .allowCredentials(true)
// .allowedMethods("GET", "POST", "DELETE", "PUT")
// .maxAge(3600);
// }
}
有一点特别重要,对于搞不清拦截器过滤器的人来说,只需要记住一句话,拦截器是spring的,(这里不说Struts),过滤器是jdk自带的!
过滤器在启动的时候就加载了,只加载一次,对所有请求都会过滤;拦截器只能对action请求拦截,也就是前端请求一次Controller,拦截器里可以对spring容器里注入的对象进行操作,也就是说你可以在拦截器里写增删改查;