Featured image of post SpringBoot和Axios的跨域请求问题

SpringBoot和Axios的跨域请求问题

解决前后端项目的跨域请求问题

解决SpringBoot和Axios的跨域请求问题

在前后端分离的项目中,前端往往需要用Axios这样的异步请求工具来对后端进行请求。浏览器的同源策略就限制了不同IP、同一IP不同端口都属于跨域请求。

SpringBoot默认也提供了用于解决跨域请求的注解@CrossOrigin,但是这个注解是将标头.allowedOrigins设置为*,而Axios不允许这样做。所以需要我们自己来配置。

自定义WebMvc配置类

对于更改WebMvc的配置都需要实现WebMvcConfigurer,然后重写其中的方法。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        //所有路径映射
        registry.addMapping("/**")
                //前端项目地址
                .allowedOrigins("http://localhost:5173", "http://localhost:7713", "http://localhost")
                //允许跨域的请求方式
                .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
                //session的过期时间
                .maxAge(3600)
                //是否允许携带cookie
                .allowCredentials(true);
    }
}

前端配置

前端需要为Axios设置允许携带Cookie,不然前端每一次访问都会生成不同的SeesionID。

1
2
3
// Vue中的写法
import axios from "axios";
axios.defaults.withCredentials = true
苟利国家生死以 岂因福祸避趋之
Built with Hugo
主题 StackJimmy 设计