springboot解决跨域的方法

First Post:

Last Update:

Word Count:
411

Read Time:
1 min

一、为什么会出现跨域问题

出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
同源策略

同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)

二、什么是跨域

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域

三、java 后端 实现 CORS 跨域请求的方式

1.重写 WebMvcConfigurer(全局跨域)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Slf4j
@Component
public class WebConfig implements WebMvcConfigurer {
/**
* 跨域配置
*
* @param registry
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedHeaders("*")
.allowedMethods("*")
.allowedOrigins("*")
.allowCredentials(false) //是否发送Cookie
.maxAge(3600L); //准备响应前的 缓存持续的最大时间
}
}

2.使用注解 (局部跨域)

在控制器上使用注解 @CrossOrigin:,表示该类的所有方法允许跨域。

1
2
3
4
5
6
7
8
@RestController
@CrossOrigin(origins = "*",maxAge = 3600)
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "hello world";
}
}

3.手动设置响应头(局部跨域)

使用 HttpServletResponse 对象添加响应头(Access-Control-Allow-Origin)来授权原始域

1
2
3
4
5
@RequestMapping("/index")
public String index(HttpServletResponse response) {
response.addHeader("Access-Allow-Control-Origin","*");
return "index";
}