Spring Boot 教程:CORS 支援
阿新 • • 發佈:2020-09-09
【注】本文譯自: https://www.tutorialspoint.com/spring_boot/spring_boot_cors_support.htm
跨域資源共享 (CORS) 是一個安全概念,它允許在 web 瀏覽器中實現對資源訪問的限制。它可避免 JavaScript 程式碼產生或消費別跨越不同域的請求。
例如,你的執行在 8080 埠的web 應用試圖使用JavaScript 消費來自 9090 埠的 RESTful web 服務。在這樣的情形下,你將面對 web 瀏覽器上跨域資源共享的安全問題。
這個問題有兩個需求要處理:
- RESTful web 服務應當支援跨域資源共享。
- RESTful web 服務應用應當允許來自 8080 埠訪問 API(s)。
在控制器方法中使能 CORS
我們需要在控制器方法上對一個RESTful web 服務使用@CrossOrigin設定源。@CrossOrigin 註解支援指定 REST API,而不是對整個應用。1 @RequestMapping(value = "/products") 2 @CrossOrigin(origins = "http://localhost:8080") 3 4 public ResponseEntity<Object> getProduct() { 5 returnnull; 6 }
全域性 CORS 配置
要定義 @Bean 以對 Spring Boot 應用全域性配置 CORS。1 @Bean 2 public WebMvcConfigurer corsConfigurer() { 3 return new WebMvcConfigurerAdapter() { 4 @Override 5 public void addCorsMappings(CorsRegistry registry) { 6 registry.addMapping("/products").allowedOrigins("http://localhost:9000");在主Spring Boot 應用中全域性配置CORS 的程式碼如下:7 } 8 }; 9 }
1 package com.tutorialspoint.demo; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 import org.springframework.context.annotation.Bean; 6 import org.springframework.web.servlet.config.annotation.CorsRegistry; 7 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 8 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 9 10 @SpringBootApplication 11 public class DemoApplication { 12 public static void main(String[] args) { 13 SpringApplication.run(DemoApplication.class, args); 14 } 15 @Bean 16 public WebMvcConfigurer corsConfigurer() { 17 return new WebMvcConfigurerAdapter() { 18 @Override 19 public void addCorsMappings(CorsRegistry registry) { 20 registry.addMapping("/products").allowedOrigins("http://localhost:8080"); 21 } 22 }; 23 } 24 }現在,你建立了一個 Spring Boot web 應用,執行在 8080 埠上,RESTful web 服務應用執行在 9090 埠上。關於如何實現 RESTful Web 服務,你可以參考本系列教程的另外一部分:消費 RESTful Web 服務。