Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
fc113b64
提交
fc113b64
authored
11月 11, 2022
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化 CorsFilter 的实现
上级
48b8a5dc
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
48 行增加
和
48 行删除
+48
-48
GatewayServerApplication.java
...va/cn/iocoder/yudao/gateway/GatewayServerApplication.java
+0
-48
CorsFilter.java
...java/cn/iocoder/yudao/gateway/filter/cors/CorsFilter.java
+48
-0
没有找到文件。
yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/GatewayServerApplication.java
浏览文件 @
fc113b64
...
@@ -2,58 +2,10 @@ package cn.iocoder.yudao.gateway;
...
@@ -2,58 +2,10 @@ package cn.iocoder.yudao.gateway;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.context.ConfigurableApplicationContext
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.core.env.Environment
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.HttpMethod
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.server.reactive.ServerHttpRequest
;
import
org.springframework.http.server.reactive.ServerHttpResponse
;
import
org.springframework.web.cors.reactive.CorsUtils
;
import
org.springframework.web.server.ServerWebExchange
;
import
org.springframework.web.server.WebFilter
;
import
org.springframework.web.server.WebFilterChain
;
import
reactor.core.publisher.Mono
;
@SpringBootApplication
@SpringBootApplication
public
class
GatewayServerApplication
{
public
class
GatewayServerApplication
{
// ----------------------------- 解决跨域 Begin -----------------------------
private
static
final
String
ALL
=
"*"
;
private
static
final
String
MAX_AGE
=
"3600L"
;
@Bean
public
WebFilter
corsFilter
()
{
return
(
ServerWebExchange
ctx
,
WebFilterChain
chain
)
->
{
ServerHttpRequest
request
=
ctx
.
getRequest
();
if
(!
CorsUtils
.
isCorsRequest
(
request
))
{
return
chain
.
filter
(
ctx
);
}
HttpHeaders
requestHeaders
=
request
.
getHeaders
();
ServerHttpResponse
response
=
ctx
.
getResponse
();
HttpMethod
requestMethod
=
requestHeaders
.
getAccessControlRequestMethod
();
HttpHeaders
headers
=
response
.
getHeaders
();
headers
.
add
(
HttpHeaders
.
ACCESS_CONTROL_ALLOW_ORIGIN
,
requestHeaders
.
getOrigin
());
headers
.
addAll
(
HttpHeaders
.
ACCESS_CONTROL_ALLOW_HEADERS
,
requestHeaders
.
getAccessControlRequestHeaders
());
if
(
requestMethod
!=
null
)
{
headers
.
add
(
HttpHeaders
.
ACCESS_CONTROL_ALLOW_METHODS
,
requestMethod
.
name
());
}
headers
.
add
(
HttpHeaders
.
ACCESS_CONTROL_ALLOW_CREDENTIALS
,
"true"
);
headers
.
add
(
HttpHeaders
.
ACCESS_CONTROL_EXPOSE_HEADERS
,
ALL
);
headers
.
add
(
HttpHeaders
.
ACCESS_CONTROL_MAX_AGE
,
MAX_AGE
);
if
(
request
.
getMethod
()
==
HttpMethod
.
OPTIONS
)
{
response
.
setStatusCode
(
HttpStatus
.
OK
);
return
Mono
.
empty
();
}
return
chain
.
filter
(
ctx
);
};
}
// ----------------------------- 解决跨域 End -----------------------------
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
// 启动 Spring Boot 应用
// 启动 Spring Boot 应用
SpringApplication
.
run
(
GatewayServerApplication
.
class
,
args
);
SpringApplication
.
run
(
GatewayServerApplication
.
class
,
args
);
...
...
yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/cors/CorsFilter.java
0 → 100644
浏览文件 @
fc113b64
package
cn
.
iocoder
.
yudao
.
gateway
.
filter
.
cors
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.HttpMethod
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.server.reactive.ServerHttpRequest
;
import
org.springframework.http.server.reactive.ServerHttpResponse
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.cors.reactive.CorsUtils
;
import
org.springframework.web.server.ServerWebExchange
;
import
org.springframework.web.server.WebFilter
;
import
org.springframework.web.server.WebFilterChain
;
import
reactor.core.publisher.Mono
;
/**
* 跨域 Filter
*
* @author 芋道源码
*/
@Component
public
class
CorsFilter
implements
WebFilter
{
private
static
final
String
ALL
=
"*"
;
private
static
final
String
MAX_AGE
=
"3600L"
;
@Override
public
Mono
<
Void
>
filter
(
ServerWebExchange
exchange
,
WebFilterChain
chain
)
{
// 非跨域请求,直接放行
ServerHttpRequest
request
=
exchange
.
getRequest
();
if
(!
CorsUtils
.
isCorsRequest
(
request
))
{
return
chain
.
filter
(
exchange
);
}
// 设置跨域响应头
ServerHttpResponse
response
=
exchange
.
getResponse
();
HttpHeaders
headers
=
response
.
getHeaders
();
headers
.
add
(
"Access-Control-Allow-Origin"
,
ALL
);
headers
.
add
(
"Access-Control-Allow-Methods"
,
ALL
);
headers
.
add
(
"Access-Control-Allow-Headers"
,
ALL
);
headers
.
add
(
"Access-Control-Max-Age"
,
MAX_AGE
);
if
(
request
.
getMethod
()
==
HttpMethod
.
OPTIONS
)
{
response
.
setStatusCode
(
HttpStatus
.
OK
);
return
Mono
.
empty
();
}
return
chain
.
filter
(
exchange
);
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论