对我来说(使用与您相同的技术),创建自定义过滤器组件 (CorsFilter) 是所有其他选项中效果最好的:
我的配置示例:
@Component
class CorsFilter: WebFilter {
@Value("\${cors.allowed_origin}")
lateinit var allowedOrigin: String
override fun filter(ctx: ServerWebExchange, chain: WebFilterChain): Mono<Void> {
ctx.response.headers.add("Access-Control-Allow-Origin", allowedOrigin)
ctx.response.headers.add("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, OPTIONS")
ctx.response.headers.add("Access-Control-Allow-Credentials", "true")
ctx.response.headers.add("Access-Control-Allow-Headers", "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range, Authorization")
return when {
ctx.request.method == HttpMethod.OPTIONS -> {
ctx.response.headers.add("Access-Control-Max-Age", "1728000")
ctx.response.statusCode = HttpStatus.NO_CONTENT
Mono.empty()
}
else -> {
ctx.response.headers.add("Access-Control-Expose-Headers", "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range")
chain.filter(ctx)
}
}
}
}
注意:allowedOrigin 变量取自 applications.properties 文件