• SpringCloud中Gateway提示OPTIONS请求跨域问题


    因为是新搭建的框架,所有组件也是用的标准组件,但在跟前端对接的时候,前端反馈说请求跨域了

    我第一反应是配置文件没生效,谁改了配置文件

        gateway:
          # 全局跨域配置
          globalcors:
            cors-configurations:
              '[/**]':
                #allowedOrigins:
                # - "http://localhost:3333" #允许所有的域
                allowedOriginPatterns:
                  - '*' #跨域处理 允许所有的域
                allowCredentials: true # 是否允许携带cookie
                allowedMethods: # 支持的方法
                  - "GET"
                  - "POST"
                  - "DELETE"
                  - "PUT"
                  - "OPTIONS"
                allowedHeaders:
                  - "*" # 允许在请求中携带的头信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    发现配置文件没问题,最近也没有人改配置相关的,然后我写了一个页面测试一下

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
        <script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js">script>
    head>
    <body>
        <input type="button" value="点击确认" onclick="checkOn()">
    
        <script>
            function checkOn() {
                $.get('http://localhost:8000/api-user/user/get/1', function (data) {
                    alert(data)
                });
            }
        script>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    请求正常,能正常访问
    然后告诉前端我这边测试正常的,不存在跨域问题
    前端说不行他那还是跨域,甩个403异常截图,仔细看了下发现是个OPTIONS请求
    打开postman用OPTIONS请求试了下,还真的提示跨域,然后各种百度跨域问题,发现全部都不行

    后面同事发现有一个配置加上去就好了

    add-to-simple-url-handler-mapping: true
    
    • 1
        gateway:
          # 全局跨域配置
          globalcors:
            add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
            cors-configurations:
              '[/**]':
                #allowedOrigins:
                # - "http://localhost:3333" #允许所有的域
                allowedOriginPatterns:
                  - '*' #跨域处理 允许所有的域
                allowCredentials: true # 是否允许携带cookie
                allowedMethods: # 支持的方法
                  - "GET"
                  - "POST"
                  - "DELETE"
                  - "PUT"
                  - "OPTIONS"
                allowedHeaders:
                  - "*" # 允许在请求中携带的头信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    add-to-simple-url-handler-mapping: true 是一个配置选项,通常用于 Spring MVC框架中的配置文件(如 applicationContext.xml 或者 Spring Boot 中的 application.properties/application.yml 文件)。

    这个选项的作用是将 URL 路径映射到简单的 URL 处理器(SimpleUrlHandlerMapping)。当设置为 true 时,Spring MVC 将使用 SimpleUrlHandlerMapping 将指定的 URL 路径映射到对应的处理器(Handler)。这样做可以简化 URL 到处理器的映射配置,特别是对于一些简单的场景,例如静态页面的访问或者简单的请求处理。

    举例来说,如果你希望将 “/hello” 路径映射到名为 “helloController” 的控制器上,你可以通过设置 add-to-simple-url-handler-mapping: true 来告诉 Spring MVC 将这个映射添加到 SimpleUrlHandlerMapping 中,而不需要显式地配置一个 HandlerMapping Bean 。

    可以发现这个配置似乎与跨域没有关系,但是加上这个后真的就可以了

  • 相关阅读:
    【智慧医疗】Springboot+Vue+Element-UI前后端分离的医疗管理平台
    web期末大作业 用HTML+CSS做一个漂亮简单的节日网页【传日文化节日中秋节】
    Vue3+elementplus搭建通用管理系统实例十一:动态表单及详情页实现下
    KMM 入门(七)处理 HTTP 网络请求
    一篇文章让你真正搞懂epoll机制
    开环零点与闭环零点对系统的影响
    js之原生ajax、Jquery-$.ajax、自定义ajax(post请求、get请求)
    GET 和 POST 到底有什么区别?
    多态 polymorphism
    YOLO系列之yolov1解读(1)
  • 原文地址:https://blog.csdn.net/cl617287/article/details/136560545