我正在阅读这个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?
答案 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
检查EndpointCorsProperties以获取完整的选项列表。
答案 3 :(得分:0)
没有。来自evil.com的脚本不应该向您的银行发出AJAX请求,例如