弹簧 CORS 设置
Posted
技术标签:
【中文标题】弹簧 CORS 设置【英文标题】:Spring CORS settings 【发布时间】:2018-09-27 10:30:22 【问题描述】:我正在尝试使跨域标头能够从任何地方(仅在本地环境中)访问服务,但我不能。
@Configuration
@RequiredArgsConstructor
public class CrossOriginConfig implements WebMvcConfigurer
private final SecurityConfiguration securityConfiguration;
@Override
public void addCorsMappings(CorsRegistry registry)
registry.addMapping("*").allowedOrigins(securityConfiguration.getCrossOrginFilter());
我使用 ajax 调用创建了一个自定义 index.html,但由于缺少 Allow-Cross-Origin 标头而失败,并且它来自另一个来源。
简单的 Spring Boot 2.0 控制器与@RestController 注解和简单的@GetMapping 一起使用。
我错过了什么?我应该包括什么以及在哪里?
【问题讨论】:
在你的控制器中使用@crossorigin
。
我将它添加到控制器本身,并尝试为 GetMapping 显式添加它,但仍然没有。
你也在用spring-security
吗?
看起来应该实现了,见:docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/… 你有没有试过在“addMapping”方法中用“/**”作为参数?使用您的安全配置将什么值传递给“allowedOrigins”?这正是您的“index.html”所在的原点吗?
Georg Wittberger 明白了这一点。谢谢,我会根据该评论写答案
【参考方案1】:
正如 Georg Wittberger 所指出的,问题在于映射。我使用了 * 通配符,这对路径不利。
而不是这个:registry.addMapping("*")
我使用了这个:registry.addMapping("/**"),它工作正常。
【讨论】:
【参考方案2】:您需要在控制器类或特定方法上添加以下注释:
@CrossOrigin
默认情况下,它允许所有来源、所有标头、@RequestMapping 注解中指定的 HTTP 方法,并且使用 30 分钟的 maxAge。
如果您只想允许http://localhost:8080 发送跨域请求
@CrossOrigin(origins = "http://localhost:8080")
相应地替换主机和端口。
查看以下 Spring 文档了解更多信息:
https://spring.io/guides/gs/rest-service-cors/
【讨论】:
以上是关于弹簧 CORS 设置的主要内容,如果未能解决你的问题,请参考以下文章