文章目录
前言
旁白
什么是跨域请求?
同源政策什么是同源?
什么是同源性
判断它们是否同源
跨源属性
SpringBoot项目如何解决跨域问题?
方法一:全局配置类方法二:在:接口上添加注解
方法三:在:类中添加注解
问题解决了
[摘要](约:blank#font_face_color0
09900_171)
前言
============================================================
CORS(跨源资源共享)允许网页向浏览器请求其他域的附加资源,例如来自CDN 的字体、CSS 和静态图像。 CORS 有助于使用相同的安全策略将来自多个域的Web 内容提供给浏览器。
旁白
============================================================
今天在项目开发过程中遇到了一个跨域的问题。解决问题后,我清理了跨域机制。我们一起来学习吧。
什么是跨域请求?
跨域请求是指浏览器向脚本文件发出Ajax请求时,脚本文件所在的服务地址与请求的服务地址不同。简单来说,如果IP、网络协议、端口相同,那么就是同一个域,否则就是跨域。这是由Netscape 著名的安全策略—— 同源策略引起的。这是浏览器对JavaScript 施加的安全限制。这是为了防止外部网络脚本恶意攻击您的服务器。
同源策略
同源策略【Same Origin Policy】是一项浏览器安全功能,可防止不同来源的客户端脚本在未经明确授权的情况下相互读写资源。 同源策略是浏览器安全的基石。
什么是源
源[origin] 是协议、域名和端口号。示例:http://www.baidu.com:80 这个网址。
什么是同源
如果地址中的协议、域名、端口号相同,则属于同一个源。
是否是同源的判断
例如,判断以下URL是否与http://www.a.com/test/index.html同源。
http://www.a.com/dir/page.html 同源
http://www.child.a.com/test/index.html 不同来源有不同域名
https://www.a.com/test/index.html 不同来源,不同协议
http://www.a.com:8080/test/index.html 不同来源有不同端口号
跨源属性
Spring MVC 提供@CrossOrigin 注解或使用CorsConfiguration。用于跨域处理。 此带注释的方法或类型允许跨域请求。
起源
允许的来源列表。它的值放置在HTTP协议的Access-Control-Allow-Origin响应头中。
* 表示允许所有来源。
如果未定义,则允许所有来源。
权限标头
实际请求期间可以使用的请求标头列表。用于预检响应标头Access-Control-Allow-Headers。
* 表示允许客户端请求的所有标头。
如果未定义,则允许所有请求的标头。
方法
支持的HTTP 请求方法列表。 如果未定义,则使用RequestMapping 注释中定义的方法。
公共标头
浏览器允许客户端访问的响应标头列表。 设置实际响应标头Access-Control-Expose-Headers 的值。
如果未定义,则使用公开标头的空列表。
允许凭据
确定浏览器是否应包含与请求关联的cookie。
false 不应包含Cookie。
“”(空字符串)——表示未定义。
true 主动响应包含标头Access-Control-Allow-Credentials,其值设置为true。
如果未定义,则允许所有凭据。
最大年龄
预响应缓存周期的最长时间(以秒为单位)。 该值在标头Access-Control-Max-Age 中设置。
如果未定义,则最大时间设置为1800 秒(30 分钟)。
SpringBoot项目如何解决跨域问题?
方法一:全局配置类
@作品
公共类CorsConfig {
私有CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration=new CorsConfiguration();
//1 设置访问源地址
corsConfiguration.addAllowedOrigin(“*”);
//2 设置访问源请求头
corsConfiguration.addAllowedHeader(“*”);
//3 设置访问源请求方式
corsConfiguration.addAllowedMethod(“*”);
//4 是否允许用户发送和处理cookie
corsConfiguration.setAllowCredentials(true);
返回cors 配置。
}
@豆子
公共CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource 源=new UrlBasedCorsConfigurationSource();
//5 配置接口的跨域设置
source.registerCorsConfiguration(“/**”, buildConfig());
返回一个新的CorsFilter(source)。
}
}
“_”代表一切。 “**”表示适用于所有接口。
addAllowedOrigin(Stringorigin)方法是添加访问源地址的方法。如果不使用“_”(即允许所有访问源),则可以配置多个访问源进行控制。
例如:
corsConfiguration.addAllowedOrigin(“http://www.aimaonline.cn/”);
corsConfiguration.addAllowedOrigin(“http://test.aimaonline.cn/”);
查看CorsConfiguration 类的官方文档(http://docs.spring.io/spring/docs/4.2.x/javadoc-api/org/springframework/web/cors/CorsConfiguration.html#addAllowedOrigin-java.lang.String-) 。
您可以找到官方对setAllowedOrigins(List allowedOrigins) 和addAllowedOrigin(Stringorigin) 方法的介绍。
addAllowedOrigin 添加访问源地址,setAllowedOrigins 可以直接设置多个访问源。
然而,当我查看setAllowedOrigins 方法的源代码时,我注意到它看起来像这样:
公共无效setAllowedOrigins(列表allowedOrigins){
this.allowedOrigins=allowedOrigins !=null?new ArrayList(allowedOrigins):null;
}
源代码显示setAllowedOrigins覆盖了this.allowedOrigins。因此,在设置访问源地址时,
addAllowedOrigin 方法必须出现在setAllowedOrigins 之后。当然,一般情况下这两种方法不应该混合使用。
方法二:接口上添加注解
例如,在您的界面上使用@CrossOrgin 注释:
@RestController
@RequestMapping(\”/帐户\”)
公共类AccountController {
@CrossOrigin
@GetMapping(\”/{id}\”)
获取公众账号(@PathVariable Long id){
//…
}
@DeleteMapping(“/{id}”)
公共无效删除(@PathVariable长id){
//…
}
}
方法三:类上添加注解
给整个类添加注解
@CrossOrigin(allowCredentials=“true”,allowedHeaders=“*”)
@RestController
@RequestMapping(\”/帐户\”)
公共类AccountController {
@GetMapping(\”/{id}\”)
获取公众账号(@PathVariable Long id){
//…
}
@DeleteMapping(“/{id}”)
公共无效删除(@PathVariable长id){
//…
}
}
问题解决了
报告此错误的主要原因是您没有将cookie 处理添加到全局配置类中。
概括
============================================================
以下是扩展链接:
https://www.cnblogs.com/m4tech/p/7871715.html
官方文档:https://docs.spring.io/spring/docs/4.2.x/javadoc-api/org/springframework/web/cors/CorsConfiguration.html#addAllowedOrigin-java.lang.String-
实现跨域的一些方法:https://spring.io/blog/2015/06/08/cors-support-in-spring-framework
感谢您的阅读~~
最后
编者多年来了解到,大多数初、中级工程师想要提升自己,往往必须自己去探索和成长,这是不系统、不可持续、无益的。
因此,我们收集整理了一份《2024年Java全套学习资料》的名单。最初的目的也很简单。换句话说,我们想帮助那些想要学习、提升自己却又不知道从哪里开始的朋友。减轻大家的负担。
由于文件比较大,这里只展示目录的部分截图。每个节点都包含主要厂商访谈、学习笔记、源代码讲义、实践项目、教学视频,并且持续更新。
如果您需要此信息,请在第栏中获取
/spring.io/blog/2015/06/08/cors-support-in-spring-framework]( )
感谢您的阅读~~
最后
编者多年来了解到,大多数初、中级工程师想要提升自己,往往必须自己去探索和成长,这是不系统、不可持续、无益的。
因此,我们收集整理了一份《2024年Java全套学习资料》的名单。最初的目的也很简单。换句话说,我们想帮助那些想要学习、提升自己却又不知道从哪里开始的朋友。减轻大家的负担。
[外部链接图像正在传输.(img-TIfq4hfg-1719527585876)]
[外部链接图像正在传输.(img-qsAXZpC9-1719527585877)]
[外部链接图片正在传输中.(img-ofaezJX0-1719527585878)]
由于文件比较大,这里只展示目录的部分截图。每个节点都包含主要厂商访谈、学习笔记、源代码讲义、实践项目、教学视频,并且持续更新。
如果您需要此信息,请在第栏中获取
#以上是SpringBoot中如何配置跨域请求?关联内容源网络仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92671.html