1.静态资源映射
(1)自动映射静态资源文件
SpringBoot默认提供了静态资源处理,使用WebMvcAutoConfiguration中的配置各种属性。
建议使用SpringBoot的默认配置方式,提供的静态资源映射如下:
- classpath:/META-INF/resources
- classpath:/resources
- classpath:/static
- classpath:/public
这几个都是静态资源的映射路径,优先级顺序为:META-INF/resources > resources > static > public。
(2)自定义映射静态资源文件
SpringBoot帮我们预留的路径下可以放置静态文件外,我们也可以根据需求自定义静态文件的放置位置,不过需要注意的时,在SpringBoot2.0前后,实现方式上是有变化的,SpringBoot2.0以前静态资源的拦截、存放位置的指定等都是通过继承WebMvcConfigurerAdapter来完成的,但是SpringBoot2.0以后需要通过实现WebMvcConfigurer重写相关的方法来完成配置。代码如下:

@Configuration public class WebMvcConfiguration implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/image/**").addResourceLocations("classpath:/image/"); }
2.拦截器
SpringBoot中使用拦截器,可在以下情况执行操作 :
- 在将请求发送到控制器之前。
- 在将响应发送给客户端之前。
例如,使用拦截器在将请求发送到控制器之前添加请求标头,并在将响应发送到客户端之前添加响应标头。
SpringBoot自定义拦截器需实现拦截器接口,使用注册接口对拦截器实例进行注册。
自定义拦截器示例如下:

@Component public class DemoInterceptor implements HandlerInterceptor { /**用于在将请求发送到控制器之前执行操作。此方法应返回true,以将响应返回给客户端。 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("请求开始 --- Url : " + request.getRequestURI()); return true; } /**用于在将响应发送到客户端之前执行操作。 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("请求处理 --- Url : " + request.getRequestURI()); } /**用于在完成请求和响应后执行操作。 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("请求结束 --- Url : " + request.getRequestURI()); if (ex != null) { System.out.println("报错信息 : "+ ex); } } }
将拦截器实例注册到spring容器中示例如下:

@Configuration public class RequestConfig implements WebMvcConfigurer { @Resource private DemoInterceptor demoInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { // 添加拦截器,配置拦截地址 registry.addInterceptor(demoInterceptor).addPathPatterns("/**"); } }
3.过滤器
javax.servlet.Filter是一个接口,可以动态地拦截请求和响应信息,以变换或使用包含在请求或响应中的信息。
过滤器使用场景:
- 数据压缩
- 记录日志
- 数据统计
- 数据格式转换
- 数据设置默认值
- 权限认证、黑白名单
- 数据加密/解密、签名效验
使用注解方式自定义过滤器示例如下:

/**自定义过滤器(注解方式) */ @Component @WebFilter(filterName = "myFilter", urlPatterns = {"/*"}, description = "自定义过滤器") public class MyCustomFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("过滤器初始化"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("before ..."); // 过滤器放行 filterChain.doFilter(servletRequest, servletResponse); System.out.println("after ..."); } @Override public void destroy() { System.err.println("过滤器销毁"); } }
使用配置Bean方式自定义过滤器示例如下:

/**自定义过滤器(配置 Bean 方式) */ public class MyCustomFilter implements Filter { public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("before ..."); // 过滤器放行 filterChain.doFilter(servletRequest, servletResponse); System.out.println("after ..."); } }

@Configuration public class FilterConfig { /**代码方式注册Bean */ @Bean public FilterRegistrationBean customFilter(){ FilterRegistrationBean<MyCustomFilter> filterBean = new FilterRegistrationBean<>(); filterBean.setFilter(new MyCustomFilter()); filterBean.setName("FilterController"); filterBean.addUrlPatterns("/*"); return filterBean; } }