SpringBoot解决跨域问题
跨域的问题的体现在于 域名不同 和 端口不同(文章下面有详细讲解区别)。
解决方法的 一 个方式(后续会继续更新):
1.用@CrossOrigin注解,通过在controller方法上注入注解@CrossOrigin。
① origins=配置白名单(方法或者类允许访问的域名,如:http://xxx.com),origin="*"代表所有域名都可访问。
② allowCredentials=“允许跨域访问携带cookie,默认false,开启为true
③maxAge是前响应的缓存持续时间的最大年龄,简单来说就是Cookie的有效期 单位为秒。若maxAge是负数,则代表为临时Cookie,不会被持久化,Cookie信息保存在浏览器内存中,浏览器关闭Cookie就消失。
@RestController
//表示该控制类可以被任何域名都可以访问。
//也可放在方法上
@CrossOrigin(origins = "*")
public class PersonController {
………………
}
//也可以这样指定
//这样确定了协议号,子域名,主域名,端口号。就可以实现,格式要正确
@CrossOrigin(origins = "http://www.google.com:8080")
举个跨域情况栗子🌰:
首先,我们要先了解整个网址的结构:
https://www.google.com:8080
https(协议) www(子域名) google(主域名) 8080(端口)
非跨域:
http://www.ABC.com/index.html 调用
http://www.ABC.com/server.PHP
跨域,主域名不同:ABC 与 BCD
http://www.ABC.com/index.html 调用
http://www.BCD.com/server.php
跨域,子域名不同:abc 与 bcd
http://abc.ABC.com/index.html 调用
http://bcd.BCD.com/server.php
跨域,端口不同:8080 与 8081
http://www.ABC.com:8080/index.html调用
http://www.ABC.com:8081/server.php
跨域,协议不同:http 与 https
http://www.ABC.com/index.html 调用
https://www.ABC.com/server.php