背景
前端项目启动登录成功后访问其他后端接口都显示未登录
前端服务有两个地址如下
Local: http://localhost:8080/
Network: http://192.168.0.108:8080/
后端接口地址如下
http://localhost:8121/
触发原因
前端是用了第二个地址访问的后端接口导致跨域了后端cookie没种上
虽然
localhost和你的 IP 地址都指向你的本地机器,但浏览器将它们视为不同的域。当你的前端通过 IP 地址访问后端时,它会触发 CORS 策略,而后端可能没有正确配置以允许来自该“域”的请求。
解决方法
前端使用localhost地址的服务
后端修改跨域配置如下
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("*");
}
}