Spring Boot - Supporto CORS

Cross-Origin Resource Sharing (CORS) è un concetto di sicurezza che consente di limitare le risorse implementate nei browser web. Impedisce al codice JavaScript di produrre o consumare le richieste su origini diverse.

Ad esempio, l'applicazione Web è in esecuzione sulla porta 8080 e utilizzando JavaScript si tenta di utilizzare i servizi Web RESTful dalla porta 9090. In tali situazioni, dovrai affrontare il problema di sicurezza della condivisione delle risorse tra le origini sui tuoi browser web.

Sono necessari due requisiti per gestire questo problema:

  • I servizi Web RESTful dovrebbero supportare la condivisione delle risorse tra le origini.

  • L'applicazione del servizio Web RESTful dovrebbe consentire l'accesso alle API dalla porta 8080.

In questo capitolo impareremo in dettaglio come abilitare le richieste cross-origin per un'applicazione del servizio Web RESTful.

Abilita CORS nel metodo controller

È necessario impostare le origini per il servizio Web RESTful utilizzando @CrossOriginannotazione per il metodo controller. Questa annotazione @CrossOrigin supporta API REST specifiche e non per l'intera applicazione.

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

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

Configurazione CORS globale

Dobbiamo definire la configurazione @Bean mostrata per impostare il supporto della configurazione CORS a livello globale per la tua applicazione Spring Boot.

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

Di seguito è riportato il codice per impostare la configurazione CORS a livello globale nell'applicazione Spring Boot principale.

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

Ora puoi creare un'applicazione Web Spring Boot che viene eseguita sulla porta 8080 e l'applicazione del servizio Web RESTful che può essere eseguita sulla porta 9090. Per ulteriori dettagli sull'implementazione del servizio Web RESTful, fare riferimento al capitolo intitolatoConsuming RESTful Web Services di questo tutorial.