在 Spring Boot 中使用 @CrossOrigin
Posted
技术标签:
【中文标题】在 Spring Boot 中使用 @CrossOrigin【英文标题】:Using @CrossOrigin in Spring Boot 【发布时间】:2016-01-20 10:00:02 【问题描述】:我正在使用最新的 Spring Boot (1.2.7.RELEASE)。我想使用 org.springframework.web.bind.annotation
包中的 @CrossOrigin
注释,如 Spring 文档中的 CORS Support 部分所述。
我想我已经拥有了所有必要的依赖项(通过 Spring Boot 默认设置),但这令人困惑:CrossOrigin
未找到,即使来自同一个包的 RestController
之类的东西也可以工作!
Error:(8, 47) java: cannot find symbol
symbol: class CrossOrigin
location: package org.springframework.web.bind.annotation
发生了什么事? CrossOrigin
是否已从 Spring-MVC 的更高版本中删除,还是我缺少一些依赖项?
pom.xml:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.7.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
【问题讨论】:
【参考方案1】:好吧,目前看来最新的 Spring Boot 版本 1.2.7.RELEASE
太旧了,无法拥有带有 CrossOrigin
的 Spring MVC 版本。 (Spring Boot 1.2.7 uses Spring version 4.1.8)。
我更新到最新的 Spring Boot 1.3 候选版本 (1.3.0.RC1
) 并且可以正常工作:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.0.RC1</version>
</parent>
还需要在pom.xml
中指定spring-milestones
存储库才能使用非发布版本。
<repositories>
<repository>
<id>spring-milestones</id>
<url>http://repo.spring.io/milestone</url>
</repository>
</repositories>
更新:覆盖 Spring 版本
正如 Stéphane Nicoll 指出的,使用 Spring 4.2.2 类(例如 CrossOrigin
)的更简单方法是:
<properties>
<!-- ... -->
<spring.version>4.2.2.RELEASE</spring.version>
</properties>
【讨论】:
如果您愿意,也可以将 Spring Boot1.2.7
与 Spring Framework 4.2.2.RELEASE
一起使用。前向覆盖不是问题。请确保在迁移到 1.3 时删除覆盖
@StéphaneNicoll:谢谢!我应该使用哪个依赖项(groupId/artifactId)? (只是spring-web
?还是spring-core
、spring-context
等?最简单的方法是什么?请参阅问题中的 pom.xml。)
顺便问一下,有没有一种简单的方法可以查看所有默认依赖项的哪些版本带有特定的 Spring Boot 版本?今天早些时候我很难找到该信息。
@CrossOrigin注解用于提供对跨域的支持,
也就是说,除了来自不同的域,我们也可以访问该服务
默认为真。
我们也可以跨域访问服务。
【讨论】:
以上是关于在 Spring Boot 中使用 @CrossOrigin的主要内容,如果未能解决你的问题,请参考以下文章
在 spring-boot 项目中使用 spring mvc xml 项目
Spring boot在Spring boot中Redis的使用
如何在 spring-boot 中禁用 spring-data-mongodb 自动配置
如何在 Spring Boot 中使用 @Transactional 注解