今天吃罗非鱼 2024-11-14 13:11 采纳率: 62.5%
浏览 78
已结题

GateWay网关跨域,请求头丢失问题

我自己写了个微服务的项目玩玩,然后在gateway网关层集成了satoken做网关统一鉴权,使用ApiFox调用接口的时候都是没问题的。

我写了个前端,用的axios调的接口,然后出现了跨域问题,这个是正常的,我在网关层的application.yml文件里配置了跨域处理之后也没问题。因为集成了satoken,做了接口校验,有的接口只能在登录之后才有权限访问。
问题就出现在这里,login登录接口是不需要鉴权的,做了跨域处理之后,axios能正常调用返回结果。但是在使用axios调用除不需要鉴权以外的接口的时候,satoken在请求头里面获取不到 Authorization 这个请求头,所以就拿不到 token 令牌。问题是我在axios的请求拦截器里面是做了判断的,也给请求头添加了 Authorization 这个请求头,但是我F12查看了 Network 里面实际的请求格式里面,它没有带上 **Authorization ** 这个请求头,不知道是什么原因,而且里面的 RequestMethod 也变成了 OPTIONS 类型的请求。


后端GateWay网关层的跨域处理配置

spring:
  profiles:
    active: dev
  main:
    web-application-type: reactive
  cloud:
    gateway:
      globalcors:
        cors-configurations:
          '[/**]':
            allowedOriginPatterns: "*"
            allowedMethods: "*"
            allowedHeaders: "*"
            exposedHeaders: "*"

后端GateWay网关层集成的Satoken统一鉴权的配置类

img


前端axios的拦截器处理

import axios from 'axios';
import { getToken } from '@/composables/cookie';

const log_service = axios.create({
    baseURL: 'http://localhost:8000/api',
    timeout: 5000,
    headers: {
        'Content-Type': 'application/json;charset=utf-8'
    }
})

log_service.interceptors.request.use(config => {
    const token = getToken()
    console.log(token)
    if (token) {
        config.headers['Authorization'] = 'Bearer ' + token
    }
    console.log(config)
    return config
},error => {
    return Promise.reject(error)
});

实际上的网络请求,这里不知道为什么会有两条请求,我实际上只请求了一次的

img



这个是Status显示为CORS error的具体的请求格式信息,这个请求格式里面的请求头有携带 Authorization

img



另一个请求的请求格式里面的信息,这里不知道什么原因,请求类型是OPTIONS类型的,请求头里面也没有携带Authorization

img



我想知道这是什么错误吗,什么原因造成,以及该怎么解决,这破问题已经折腾了三天了

  • 写回答

4条回答 默认 最新

  • 今天吃罗非鱼 2024-11-14 14:20
    关注

    谢谢各位,我自己已经解决了。写个配置类,然后注入CorsWebFilter这个bean。我把图片贴下面。

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月22日
  • 已采纳回答 11月14日
  • 创建了问题 11月14日