Spring Boot - obsługa CORS

Współdzielenie zasobów między źródłami (CORS) to koncepcja bezpieczeństwa, która umożliwia ograniczenie zasobów zaimplementowanych w przeglądarkach internetowych. Zapobiega generowaniu lub wykorzystywaniu żądań przez kod JavaScript z innego źródła.

Na przykład, Twoja aplikacja internetowa działa na porcie 8080 i używając JavaScript próbujesz korzystać z usług sieciowych RESTful z portu 9090. W takich sytuacjach napotkasz problem bezpieczeństwa współdzielenia zasobów między źródłami w swoich przeglądarkach internetowych.

Do rozwiązania tego problemu potrzebne są dwa wymagania -

  • Usługi sieciowe RESTful powinny obsługiwać współdzielenie zasobów między źródłami.

  • Aplikacja usługi WWW zgodna z REST powinna umożliwiać dostęp do interfejsów API z portu 8080.

W tym rozdziale dowiemy się szczegółowo, jak włączyć żądania cross-Origin dla aplikacji usługi sieci Web zgodnej z REST.

Włącz CORS w metodzie kontrolera

Musimy ustawić źródła usługi sieci Web RESTful przy użyciu @CrossOriginadnotacja dotycząca metody kontrolera. Ta adnotacja @CrossOrigin obsługuje określony interfejs API REST, a nie całą aplikację.

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

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

Globalna konfiguracja CORS

Musimy zdefiniować pokazaną konfigurację @Bean, aby ustawić obsługę konfiguracji CORS globalnie dla Twojej aplikacji Spring Boot.

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

Kod do globalnego ustawienia konfiguracji CORS w głównej aplikacji Spring Boot jest podany poniżej.

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");
         }
      };
   }
}

Teraz możesz utworzyć aplikację internetową Spring Boot działającą na porcie 8080 oraz aplikację internetową RESTful, która może działać na porcie 9090. Więcej informacji na temat implementacji usługi WWW zgodnej z REST można znaleźć w rozdziale zatytułowanymConsuming RESTful Web Services tego samouczka.