Spring Boot - รองรับ CORS

Cross-Origin Resource Sharing (CORS) เป็นแนวคิดด้านความปลอดภัยที่อนุญาตให้ จำกัด ทรัพยากรที่ใช้งานในเว็บเบราว์เซอร์ ป้องกันไม่ให้โค้ด JavaScript สร้างหรือใช้คำขอจากแหล่งที่มาที่แตกต่างกัน

ตัวอย่างเช่นเว็บแอปพลิเคชันของคุณกำลังทำงานบนพอร์ต 8080 และด้วยการใช้ JavaScript คุณกำลังพยายามใช้บริการเว็บ RESTful จากพอร์ต 9090 ภายใต้สถานการณ์เช่นนี้คุณจะต้องเผชิญกับปัญหาความปลอดภัยของการแชร์ทรัพยากรข้ามแหล่งที่มาบนเว็บเบราว์เซอร์ของคุณ

จำเป็นต้องมีข้อกำหนดสองประการในการจัดการปัญหานี้ -

  • บริการเว็บ RESTful ควรรองรับการแชร์ทรัพยากรข้ามแหล่งที่มา

  • แอปพลิเคชันบริการเว็บ RESTful ควรอนุญาตให้เข้าถึง API จากพอร์ต 8080

ในบทนี้เราจะเรียนรู้รายละเอียดเกี่ยวกับวิธีเปิดใช้งานคำขอข้ามแหล่งที่มาสำหรับแอปพลิเคชัน RESTful Web Service

เปิดใช้งาน CORS ในวิธีการควบคุม

เราจำเป็นต้องตั้งค่าต้นกำเนิดสำหรับบริการเว็บ RESTful โดยใช้ @CrossOriginคำอธิบายประกอบสำหรับวิธีการควบคุม คำอธิบายประกอบ @CrossOrigin นี้รองรับ REST API เฉพาะไม่ใช่สำหรับแอปพลิเคชันทั้งหมด

@RequestMapping(value = "/products")
@CrossOrigin(origins = "http://localhost:8080")

public ResponseEntity<Object> getProduct() {
   return null;
}

การกำหนดค่า Global CORS

เราจำเป็นต้องกำหนดการกำหนดค่า @Bean ที่แสดงเพื่อตั้งค่าการสนับสนุนการกำหนดค่า CORS ทั่วโลกให้กับแอปพลิเคชัน Spring Boot ของคุณ

@Bean
public WebMvcConfigurer corsConfigurer() {
   return new WebMvcConfigurerAdapter() {
      @Override
      public void addCorsMappings(CorsRegistry registry) {
         registry.addMapping("/products").allowedOrigins("http://localhost:9000");
      }    
   };
}

ในการตั้งรหัสเพื่อตั้งค่า CORS ทั่วโลกในแอปพลิเคชัน Spring Boot หลักได้รับด้านล่าง

package com.tutorialspoint.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@SpringBootApplication
public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
   @Bean
   public WebMvcConfigurer corsConfigurer() {
      return new WebMvcConfigurerAdapter() {
         @Override
         public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/products").allowedOrigins("http://localhost:8080");
         }
      };
   }
}

ตอนนี้คุณสามารถสร้างเว็บแอปพลิเคชัน Spring Boot ที่ทำงานบนพอร์ต 8080 และแอปพลิเคชันบริการเว็บ RESTful ของคุณที่สามารถทำงานบนพอร์ต 9090 ได้ สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการใช้งานเกี่ยวกับ RESTful Web Service คุณสามารถอ้างถึงบทที่ชื่อConsuming RESTful Web Services ของบทช่วยสอนนี้