背景

前端项目启动登录成功后访问其他后端接口都显示未登录

前端服务有两个地址如下

Local: http://localhost:8080/

Network: http://192.168.0.108:8080/

后端接口地址如下

http://localhost:8121/

触发原因

前端是用了第二个地址访问的后端接口导致跨域了后端cookie没种上

虽然 localhost 和你的 IP 地址都指向你的本地机器,但浏览器将它们视为不同的域。当你的前端通过 IP 地址访问后端时,它会触发 CORS 策略,而后端可能没有正确配置以允许来自该“域”的请求。

解决方法

  1. 前端使用localhost地址的服务

  2. 后端修改跨域配置如下

package com.yupi.yuoj.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 全局跨域配置
 */
@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 覆盖所有请求
        registry.addMapping("/**")
                // 允许发送 Cookie
                .allowCredentials(true)
                // 放行哪些域名(必须用 patterns,否则 * 会和 allowCredentials 冲突)
                .allowedOriginPatterns('http://localhost:8080', 'http://192.168.0.108:8080')
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .allowedHeaders("*")
                .exposedHeaders("*");
    }
}