 
                
CORS je bezpečnostní mechanismus, který zabraňuje JavaScriptu přistupovat k API na jiné doméně, než byla načtena stránka. Pokud klient běží na http://localhost:4200 a API na http://localhost:8080, jde o tzv. cross-origin požadavek, který musí server výslovně povolit.
Pro povolení CORS odpovězte s těmito hlavičkami:
Access-Control-Allow-Origin: http://localhost:4200 Access-Control-Allow-Methods: GET, POST, PUT, DELETE Access-Control-Allow-Headers: Content-Type
V Java EE použijte filtr:
@Provider
public class CORSFilter implements ContainerResponseFilter {
  public void filter(ContainerRequestContext req, ContainerResponseContext res) {
    res.getHeaders().add("Access-Control-Allow-Origin", "*");
    res.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS");
    res.getHeaders().add("Access-Control-Allow-Headers", "Content-Type, Authorization");
  }
}
V produkčním prostředí je vhodnější použít:
CORS je výhodný ve vývoji, ale v produkci může skrývat bezpečnostní rizika, hlavně pri použití *.
Při volání API s hlavičkami probíhá tzv. preflight – tedy kontrolní požadavek typu OPTIONS. Pokud na něj server neodpoví správně, hlavní požadavek nebude doručen.
Access-Control-Allow-Headers* v Allow-OriginTomcat: konfigurace přes web.xml nebo filter
Spring Boot:
@Bean
public WebMvcConfigurer corsConfigurer() {
  return new WebMvcConfigurer() {
    public void addCorsMappings(CorsRegistry registry) {
      registry.addMapping("/api/**")
              .allowedOrigins("http://localhost:4200")
              .allowedMethods("GET", "POST", "PUT", "DELETE");
    }
  };
}
Tohle vše si vyzkoušíte v kurzu Java REST služby s Hibernate, kde si vytvoříte REST API, nastavíte CORS a připojíte Angular frontend.
Viac informacií preberáme na kurze:
