CORS 设置笔记
1. setAllowedOrigins
vs setAllowedOriginPatterns
setAllowedOrigins
- 用于明确指定允许的 URL 列表。
- 不能与通配符 (
*
) 一起使用。 - 例:
只允许来自setAllowedOrigins(Arrays.asList("https://example.com", "https://another-example.com"));
https://example.com
和https://another-example.com
的请求。
setAllowedOriginPatterns
- 允许使用正则表达式模式来指定允许的来源。
- 适用于需要模式匹配,例如子域的情况。
- 例:
允许来自setAllowedOriginPatterns(Arrays.asList("https://*.example.com"));
https://example.com
的任何子域的请求,如https://sub.example.com
或https://another-sub.example.com
。
注意:如果同时设置了 setAllowedOrigins
和 setAllowedOriginPatterns
,setAllowedOriginPatterns
的设置会覆盖 setAllowedOrigins
的设置。
2. Spring 的 SockJS 设置问题
在 Spring 5.3+ 版本中,使用 setAllowedOrigins("*")
与 withSockJS()
结合时会导致错误。
报错:
IllegalArgumentException: When SockJS is enabled, use the setAllowedOriginPatterns method instead.
原因:
SockJS 提供了一个模拟 WebSocket 的后备选项,可能涉及到跨域请求。Spring 强制使用 setAllowedOriginPatterns
来更明确地设置允许的源,以增强安全性。
解决:
使用 SockJS 时,应该使用 setAllowedOriginPatterns("*")
而不是 setAllowedOrigins("*")
。
希望这份笔记对你有所帮助!