【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域
勘误
有个朋友说:为什么我配置了WebMvcConfigurer,静态资源static依然能访问?!
这里是本人的失误,我在启动类中添加了EnableWebMvc注解(文章里却没有提及,最好的做法是放在对应的配置类上面),导致了默认配置的失效。如果不使用该注解,默认的配置路径不会被覆盖掉~
前言
虽然现在都流行前后端分离部署,但有时候还是需要把前端文件跟后端文件一起打包发布,这就涉及到了springboot的静态资源访问的问题。不单只是静态资源打包,比如使用本地某个目录作为文件存储,也可通过WebMvcConfigurer接口来配置。
在与前端交互的过程中,也会碰到一个跨域的问题。我们也可通过WebMvcConfigurer接口来解决跨域的问题。
springboot默认静态文件目录
Spring Boot 默认为我们提供了静态资源处理,我建议大家直接使用Spring Boot的默认配置即可。默认提供的静态资源映射如下:
- classpath:/META-INF/resources
- classpath:/resources
- classpath:/static
- classpath:/public
这些目录的静态资源时可以直接访问到的。上面这几个都是静态资源的映射路径,优先级顺序为:META-INF/resources > resources > static > public
使用第一讲中spring initilize工具创建的springboot工程,默认也给我们创建了classpath:/static这个目录
我们往这个目录放一个图片,head.jpg
通过浏览器访问http://localhost:8080/head.jpg
自定义配置静态资源配置
以上这些都是springboot默认给我们提供的,那么我们有没有能力自己自定义一个静态资源映射呢?完全可以。使用WebMvcConfigurer这个类即可实现自定义静态资源配置。
我们新建一个WebConfig类实现WebMvcConfigurer接口 ,如下:
@Configuration
public class WebConfig implements WebMvcConfigurer {
}
现在我们什么都不配置,然后重启应用,访问http://localhost:8080/head.jpg。却发现程序报404了:
这是因为我们配置了WebMvcConfigurer,这就替换了springboot原先的默认配置。这里我们想要自定义一个静态资源配置,比如,我们/file/**这样的请求,定向到我的D盘根目录下。我们重写WebMvcConfigurer接口的addResourceHandlers方法。如下:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/file/**")
.addResourceLocations("file:D:\");
}
然后把head.jpg图片放到D盘下:
这里需要注意的是,配置外部的资源要使用file声明,配置jar包内部的使用classpath声明。
WebMvcConfigurer接口解决跨域问题
可以通过重写WebMvcConfigurer的addCorsMappings方法,可以配置跨域的问题。如下:
/**
* 跨域支持
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "DELETE", "PUT", "PATCH")
.maxAge(3600 * 24);
}
总结
WebMvcConfigurer接口不单只是能够配置静态资源访问和解决跨域问题,它还可以配置很多Web请求相关的东西,比如拦截器,数据转化(MessageConverters)等,碍于篇幅,这里就先不讨论了。可以配置的东西,可以通过接口的方法查看,如下:
SpringBoot 默认帮我们做了很多事情,这大大方便了我们的开发。 但是,有时候我们想要自己定义一些Handler,Interceptor,ViewResolver,MessageConverter,在Spring Boot 2.0之前版本都是靠重写WebMvcConfigurerAdapter的方法来添加自定义拦截器,消息转换器等。SpringBoot 2.0 后,该类被标记为@Deprecated。现在,我们只能靠实现WebMvcConfigurer接口来实现了。
【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域的更多相关文章
- springboot WebMvcConfigurer配置静态资源和解决跨域
前言 虽然现在都流行前后端分离部署,但有时候还是需要把前端文件跟后端文件一起打包发布,这就涉及到了springboot的静态资源访问的问题.不单只是静态资源打包,比如使用本地某个目录作为文件存储,也可 ...
- 《前端运维》二、Nginx--3静态资源服务、跨域与其他
一.静态资源服务 首先,静态资源一般是指客户端发送请求到Web服务器,web服务器从内存中取得相应的文件,返回给客户端,客户端解析并渲染出来.动态资源呢,则是由客户端发起请求,先交由web容器,web ...
- 【快学springboot】12.实现拦截器
前言 之前在[快学springboot]6.WebMvcConfigurer配置静态资源和解决跨域里有用到WebMvcConfigurer接口来实现静态资源的映射和解决跨域请求,并且在文末还说了Web ...
- springboot解决跨域问题(Cors)
1.对于前后端分离的项目来说,如果前端项目与后端项目部署在两个不同的域下,那么势必会引起跨域问题的出现. 针对跨域问题,我们可能第一个想到的解决方案就是jsonp,并且以前处理跨域问题我基本也是这么处 ...
- vue脚手架解决跨域问题-------配置反向代理
1.打开config/index.js 2.在dev配置对象中找到proxyTable:{} 3.添加如下配置 // 配置反向代理,解决跨域请求 proxyTable: { '/api': { tar ...
- spring-boot配置静态资源映射的坑:properties文件不能添加注释
如此博文所述,Spring Boot 对静态资源映射提供了默认配置 默认将 /** 所有访问映射到以下目录:classpath:/staticclasspath:/publicclasspath:/r ...
- SpringBoot cache-control 配置静态资源缓存 (以及其中的思考经历)
昨天在部署项目时遇到一个问题,因为服务要部署到外网使用,中间经过了较多的网络传输限制,而且要加载arcgis等较大的文件,所以在部署后,发现页面loading需要很长时间,而且刷新也要重新从服务器下载 ...
- SpringBoot 配置静态资源映射
SpringBoot 配置静态资源映射 (嵌入式servlet容器)先决知识 request.getSession().getServletContext().getRealPath("/& ...
- springboot配置静态资源访问路径
其实在springboot中静态资源的映射文件是在resources目录下的static文件夹,springboot推荐我们将静态资源放在static文件夹下,因为默认配置就是classpath:/s ...
随机推荐
- 关于C语言gets()函数
看这里就好了: 1.https://www.quora.com/Why-is-it-unsafe-using-gets-in-C-C++ 2.https://stackoverflow.com/que ...
- DreamWeaver CC 中的回车
在Dreamweaver CC中换行有两种: 第一种是在设计视图中直接回车,对应的代码是<p>标签,即新生成一个段落. (注:在DreamWeaver CC编辑的代码中,按下回车相当于 ) ...
- 将信息存储在claim中,通过扩展AbpSession取出
一.将信息存储到claim中 claims.AddRange(new[] { //新增身份,添加租户id new Claim("RoleName","管理员111&quo ...
- 重磅消息,Micrium的uCOS全家桶将推出免费商业授权
说明: 1.预计将在下个月末的Embedded World 2020正式宣布开源免费商用. 2.uCOS全家桶一旦宣布免费商用,将给那些还在收费的RTOS带来一波冲击.其中最值的关注的是去年微软收购T ...
- [题解] 2019牛客暑期多校第三场H题 Magic Line
题目链接:https://ac.nowcoder.com/acm/contest/883/H 题意:二维平面上有n个不同的点,构造一条直线把平面分成两个点数相同的部分. 题解:对这n个点以x为第一关键 ...
- list的使用-Hdu 1276
士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- VBA 学习笔记 - 输入框
学习资料 https://www.yiibai.com/vba/vba_input_box.html 输入框 InputBox 函数说明 提示用户输入值.当输入值后,如果用户单击确定 按钮或按下键盘上 ...
- C# MD5加密-MD5Helper
原文地址:https://ken.io/note/csharp-md5 一.前言 MD5说明http://zh.wikipedia.org/wiki/MD5 .NET MD5类 官方文档&示例 ...
- Mybatic逆向工程的使用
前言:利用别人的方法.知识.经历或精神成为你自己,不思考不实践不总结不反馈,就不会变成你的. 转载必须表明出处:https://www.cnblogs.com/fby698/p/9463831.htm ...
- Burpsuite 工具详解(常用模块之proxy、spider 、decoder)
Burpsuite常用模块之proxy.spider .decoder 是一款集成化渗透测试工具(jav ...