Spring @RestController默认启用CORS吗?

时间:2016-10-05 19:49:15

标签: java spring rest spring-mvc spring-boot

我正在阅读这个Spring security tutorial并且它提到我们可能会看到2个动态资源请求,因为这个控制器有一个CORS协商:

    @SpringBootApplication
    @RestController
    public class UiApplication {

      @RequestMapping("/resource")
      public Map<String,Object> home() {
        Map<String,Object> model = new HashMap<String,Object>();
        model.put("id", UUID.randomUUID().toString());
        model.put("content", "Hello World");
        return model;
      }

      public static void main(String[] args) {
        SpringApplication.run(UiApplication.class, args);
      }

    }

只是好奇@RestController注释默认是否启用CORS?

4 个答案:

答案 0 :(得分:6)

您需要自己添加 @CrossOrigin 注释才能在Spring中获得CORS支持。

为什么:

启用CORS(跨源资源共享)<默认 将是严重的安全问题

official文档中考虑此示例。

  

出于安全原因,浏览器禁止对资源进行AJAX调用   居住在当前起源之外。例如,当您正在检查时   您的银行帐户在一个标签中,您可以打开 evil.com 网站   在另一个标签中。来自evil.com的脚本应能够制作   AJAX向您的银行API请求(例如从您的银行取款)   帐户!)使用您的凭据。

答案 1 :(得分:2)

不,请参阅https://spring.io/guides/gs/rest-service-cors/

  

这样RESTful Web服务将包含CORS访问控制   在其响应中的标题,您只需要添加@CrossOrigin   处理程序方法的注释:

@CrossOrigin(origins = "http://localhost:9000")
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(required=false, defaultValue="World") String name) {
   System.out.println("==== in greeting ====");
   return new Greeting(counter.incrementAndGet(), String.format(template, name));
}

答案 2 :(得分:1)

默认情况下禁用CORS支持,仅在endpoints.cors.allowedorigins后启用 物业已经设定。下面的配置允许来自的GET和POST调用 example.com域名:

endpoints.cors.allowed-origins=http://example.com
endpoints.cors.allowed-methods=GET,POST

Spring boot ref guide.

检查EndpointCorsProperties以获取完整的选项列表。

答案 3 :(得分:0)

没有。来自evil.com的脚本不应该向您的银行发出AJAX请求,例如