Vue解决跨域问题

在本地测试Vue + spring boot前后端分离项目时,因为前后端项目端口不一致会导致跨域问题

此时就需要前后端分别进行设置允许跨域处理

在设置允许跨域后,在登录场景下还会用到session,而session的原理就是在浏览器的cookie中保存一个sessionID

Vue设置

此处以axios为例

所以我们需要在跨域的过程中允许请求携带cookie

import axios from 'axios'

export function request(config) {
  // 创建axios的实例
  const instance = axios.create({
    baseURL: import.meta.env.VITE_API_DOMAIN,
   // baseURL: 'http://3710666.cn:4000/',
    timeout: 10000,
    withCredentials: true,
    crossDomain: true
  })
  //console.log

Springboot后端设置允许跨域

配置拦截器

/**
 * WEB拦截器配置
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {


    //设置拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //允许跨域
        registry.addInterceptor(new FilterConfig()).addPathPatterns("/**");

    }
}

配置允许跨域

/**
 * 允许跨域请求
 * @author 无缺
 */
@Component
public class FilterConfig implements HandlerInterceptor{

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //支持跨域请求,必须是具体的请求域
        response.setHeader("Access-Control-Allow-Origin",request.getHeader("Origin"));
        //支持请求方式
        response.setHeader("Access-Control-Allow-Methods", "*");
        //是否支持cookie跨域
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Headers", "Authorization,Origin, X-Requested-With, Content-Type,         Accept,Access-Token");
        return true;
    }

    .....
}

备注:

         1.  加上:  withCredentials: true,  

          2.主要是跟这个 baseURL 有关系 baseURL: import.meta.env.VITE_API_DOMAIN,

           如果baseURL为: http://127.0.0.1:8080/,前端访问网址也必须为这个,使用

           http://localhost:8080/  还是存在session 不一致的情况,所以注意这个请求地址

Logo

前往低代码交流专区

更多推荐