导航菜单
首页 >  springboot 配置拦截器后出现静态资源无法访问  > 【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域

【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域

勘误

有个朋友说:为什么我配置了WebMvcConfigurer,静态资源static依然能访问?!

这里是本人的失误,我在启动类中添加了EnableWebMvc注解(文章里却没有提及,最好的做法是放在对应的配置类上面),导致了默认配置的失效。如果不使用该注解,默认的配置不会失效~

前言

虽然现在都流行前后端分离部署,但有时候还是需要把前端文件跟后端文件一起打包发布,这就涉及到了springboot的静态资源访问的问题。不单只是静态资源打包,比如使用本地某个目录作为文件存储,也可通过WebMvcConfigurer接口来配置。

在与前端交互的过程中,也会碰到一个跨域的问题。我们也可通过WebMvcConfigurer接口来解决跨域的问题。

springboot默认静态文件目录

Spring Boot 默认为我们提供了静态资源处理,我建议大家直接使用Spring Boot的默认配置即可。默认提供的静态资源映射如下:

classpath:/META-INF/resourcesclasspath:/resourcesclasspath:/staticclasspath:/public

这些目录的静态资源时可以直接访问到的。上面这几个都是静态资源的映射路径,优先级顺序为:META-INF/resources > resources > static > public

使用第一讲中spring initilize工具创建的springboot工程,默认也给我们创建了classpath:/static这个目录

【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域

我们往这个目录放一个图片,head.jpg

【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域

通过浏览器访问http://localhost:8080/head.jpg

【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域自定义配置静态资源配置

以上这些都是springboot默认给我们提供的,那么我们有没有能力自己自定义一个静态资源映射呢?完全可以。使用WebMvcConfigurer这个类即可实现自定义静态资源配置。

我们新建一个WebConfig类实现WebMvcConfigurer接口 ,如下:

代码语言:javascript复制@Configurationpublic class WebConfig implements WebMvcConfigurer { }

现在我们什么都不配置,然后重启应用,访问http://localhost:8080/head.jpg。却发现程序报404了:

【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域

这是因为我们配置了WebMvcConfigurer,这就替换了springboot原先的默认配置。这里我们想要自定义一个静态资源配置,比如,我们/file/**这样的请求,定向到我的D盘根目录下。我们重写WebMvcConfigurer接口的addResourceHandlers方法。如下:

代码语言:javascript复制@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/file/**") .addResourceLocations("file:D:\");}

然后把head.jpg图片放到D盘下:

【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域

这里需要注意的是,配置外部的资源要使用file

相关推荐: