【问题标题】:Using @CrossOrigin in Spring Boot在 Spring Boot 中使用 @CrossOrigin
【发布时间】: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>

【问题讨论】:

    标签: spring spring-mvc spring-boot cors


    【解决方案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 Boot 1.2.7 与 Spring Framework 4.2.2.RELEASE 一起使用。前向覆盖不是问题。请确保在迁移到 1.3 时删除覆盖
    • @StéphaneNic​​oll:谢谢!我应该使用哪个依赖项(groupId/artifactId)? (只是spring-web?还是spring-corespring-context 等?最简单的方法是什么?请参阅问题中的 pom.xml。)
    • 顺便问一下,有没有一种简单的方法可以查看所有默认依赖项的哪些版本带有特定的 Spring Boot 版本?今天早些时候我很难找到该信息。
    • 4.2.2.RELEASE
    • 在评论中提出其他问题可能不是一个好主意...docs.spring.io/spring-boot/docs/1.2.7.RELEASE/reference/…
    【解决方案2】:

    @CrossOrigin注解用于提供对跨域的支持,

    也就是说,除了来自不同的域,我们也可以访问该服务

    默认为真。

    我们也可以跨域访问服务。

    【讨论】:

      猜你喜欢
      • 2019-09-18
      • 2020-08-27
      • 2021-09-17
      • 2018-07-27
      • 2020-10-24
      • 2020-08-20
      • 2016-10-18
      • 1970-01-01
      • 2020-07-11
      相关资源
      最近更新 更多