springboot项目中的mvc配置大概有两种写法,一种是基于实现接口WebMvcConfigurer,一种是基于继承WebMvcConfigurationSupport,这两种写法会冲突,最终spring容器会执行继承WebMvcConfigurationSupport类中的重写方法,而忽略实现接口WebMvcConfigurer所重写的方法。
因此,一个应用中,应只选择一种方法进行配置。
如下:

@Configuration
public class WebMvcConfig  implements WebMvcConfigurer {
    /**
     *
     * 功能描述:从上到下:1.跨域支持2.配置首页3.配置静态资源访问
     * @Author 李
     * @MethodName corsConfigurer
     * @Date 8:55 2020/10/10
     * @param
     * @return org.springframework.web.servlet.config.annotation.WebMvcConfigurer
     * @exception
     **/
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedMethods("*")
                        .allowedHeaders("*")
                        .allowedOrigins("*")
                        .allowCredentials(true)
                        .exposedHeaders(HttpHeaders.SET_COOKIE).maxAge(18000L);
            }
            @Override
            public void addViewControllers(ViewControllerRegistry registry){
                registry.addViewController("/").setViewName("index");
                registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
            }
            @Override
            public void addResourceHandlers(ResourceHandlerRegistry registry){
                registry.addResourceHandler("/static/**")
                        .addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");
                registry.addResourceHandler("swagger-ui.html")
                        .addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/META-INF/resources/");
                registry.addResourceHandler("/webjars/**")
                        .addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/META-INF/resources/webjars/");
            }
        };
    }
}

关于静态资源访问,如果是纯前后端分离的项目,则不需要,此处是因为本项目有少量的PC页面,直接写在了后端,如不配置,将无法访问。
可以看到,swagger的静态资源路径前缀是/META-INF/resources/,而本项目的静态资源路径是/static/,因此,需要额外配置。
springboot的核心理念是约定大于配置,在没有额外配置的情况下,其静态资源优先级如下:

classpath:/META-INF/resources/
 classpath:/resources/
 classpath:/static/
 classpath:/public/
 /:当前项目的根路径


可以看到,swagger正是利用了这一点,将其静态资源放在了默认最高优先级目录下,无需额外配置可直接访问,但当项目中存在自定义的静态资源,且其路径不在此目录下时,是无法访问的。