因为是新搭建的框架,所有组件也是用的标准组件,但在跟前端对接的时候,前端反馈说请求跨域了
我第一反应是配置文件没生效,谁改了配置文件
gateway:
# 全局跨域配置
globalcors:
cors-configurations:
'[/**]':
#allowedOrigins:
# - "http://localhost:3333" #允许所有的域
allowedOriginPatterns:
- '*' #跨域处理 允许所有的域
allowCredentials: true # 是否允许携带cookie
allowedMethods: # 支持的方法
- "GET"
- "POST"
- "DELETE"
- "PUT"
- "OPTIONS"
allowedHeaders:
- "*" # 允许在请求中携带的头信息
发现配置文件没问题,最近也没有人改配置相关的,然后我写了一个页面测试一下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<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>
请求正常,能正常访问
然后告诉前端我这边测试正常的,不存在跨域问题
前端说不行他那还是跨域,甩个403异常截图,仔细看了下发现是个OPTIONS请求
打开postman用OPTIONS请求试了下,还真的提示跨域,然后各种百度跨域问题,发现全部都不行
后面同事发现有一个配置加上去就好了
add-to-simple-url-handler-mapping: true
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:
- "*" # 允许在请求中携带的头信息
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 。
可以发现这个配置似乎与跨域没有关系,但是加上这个后真的就可以了