静态资源拦截器
对于一些小型的系统,如果要使得项目结构可视化可读性比较好,页面的静态资源管理,路径的管理等都需要有一定规范。
我们先看看路径包含哪些:
1. jar包内的本地路径,也即服务器容器路径
2. http的URL路径,即网络请求路径
3. 静态资源存储路径(通过URL请求图片,css等文件路径)
我们来看看springMVC如何处理的
首先,springMVC会通过映射把网络的根路径映射给了DispatcherServlet
然后通过DispatcherServlet做后续处理,这个不做讲解,看springMVC处理流程。
我们知道,spring默认访问resources下资源文件,如果要改变目录,需要在配置中指定位置。
若我要把图片等资源进行统一管理起来,放到服务器别的目录下,如何进行映射。
这里只介绍一种方式,关于springboot访问静态资源配置拦截器,也可以是统一日志管理,也可以是登录拦截器等。
首先,应该继承springMVC的拦截器配置总类WebMvcConfigurerAdapter,通过注解@Configuration来标识此类重写。
@EnableWebMvc @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Bean LoggerInterceptor loggerInterceptor(){ return new LoggerInterceptor(); } @Override public void addResourceHandlers(ResourceHandlerRegistry r){ System.out.println("5555555555555555555555"); r.addResourceHandler("/mm/**").addResourceLocations("file:F:/mm/");//网络路径,硬盘存储路径 super.addResourceHandlers(r); } @Override public void addInterceptors(InterceptorRegistry registry) { System.out.println("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); registry.addInterceptor(new LoggerInterceptor()).addPathPatterns("/*").excludePathPatterns( "/mm/*"); super.addInterceptors(registry); } }
其中EnableWebMvc注解如果没有特殊处理,可以不用,
然后,你可以做一些处理,日志拦截器如下:
public class LoggerInterceptor implements HandlerInterceptor { private static final Logger log = LoggerFactory.getLogger(LoggerInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("111111111111111111"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("222222222222222"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("333333333333333333"); } }