CORS v praxi: Proč je blokován přístup k vaší REST službě a jak to vyřešit

1. Základní vysvětlení CORS (Cross-Origin Resource Sharing)

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.

2. Nastavení hlaviček Access-Control-Allow-* v Java EE kontejneru

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

3. Bezpečnostní omezení: Kdy raději nepoužívat CORS

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í *.

4. Nejčastější chyby (OPTIONS, preflight, credentials)

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.

5. Konfigurace v Tomcatu, Spring Boot a dalších

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

Chcete se to naučit v praxi?

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.

Jak začít programovat?

Úvod do programování pro každého bez předchozích znalostí.

Stáhněte si náš ebook teď výjimečně zdarma!!!

Viac informacií preberáme na kurze:

Kurz JAVAEEREST - JAVA REST - RESTful Webové služby s Hibernate

Marián Knězek