浏览器访问资源流程:
声明拦截器的bean,并实现HandlerInterceptor
接口(注意:扫描加载bean):
@Component
public class ProjectInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("ProjectInterceptor.preHandle()");
return true;
};
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("ProjectInterceptor.postHandle()");
};
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("ProjectInterceptor.afterCompletion()");
};
};
定义配置类,继承WebMvcConfigurationSupport
,实现addInterceptor方法并添加拦截器并设定拦截的访问路径,路径可以通过可变参数设置多个(注意:扫描加载配置):
@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
@Autowired
private ProjectInterceptor projectInterceptor;
@Override
protected void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(projectInterceptor).addPathPatterns("/books", "/books/*");
};
};
SpringMvcConfig配置类与SpringMvcSupport配置类合并: 使SpringMvcConfig配置类实现WebMvcConfigurer接口,并在其中重写相关方法 (此方法有缺点:侵入性较强) @Configuration @ComponentScan({"com.cikian.controller"};) @EnableWebMvc public class SpringMvcConfig implements WebMvcConfigurer { @Autowired private ProjectInterceptor projectInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(projectInterceptor).addPathPatterns("/books", "/books/*"); }; @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/pages/**").addResourceLocations("/pages/"); registry.addResourceHandler("/css/**").addResourceLocations("/css/"); registry.addResourceHandler("/js/**").addResourceLocations("/js/"); registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/"); registry.addResourceHandler("/index.html").addResourceLocations("/index.html"); }; };
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler)
throws Exception {
return true;
};
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView)
throws Exception {
};
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception ex)
throws Exception {
};
拦截器链的运行顺序: