CORS
CORS(Cross-Origin Resource Sharing) 란?
서로 다른 출처의 자원을 공유할 수 있도록 설정하는 권한 체제를 말한다.
따라서 CORS를 설정해주지 않거나 제대로 설정하지 않은 경우, 원하는 대로 리소스를 공유하지 못하게 된다.
출처(Origin) 란?
URL 구조에서 Protocal, Host, Port를 합친 것을 말한다. 셋중 하나라도 다르면 다른 출처로 분류된다.
백엔드 서버가 실행되는 중이면 콘솔 창에서 해당 오류가 나타난다. 이는 보안을 위한 CORS 헤더 Policy를 위반했기 때문이다. 처음 리소스를 제공한 출처가(Origin)이 현재 요청하려는 도메인(Origin)과 다르더라도 요청을 허락해 주는 웹 보안 방침이다.
1. 설정 방법(모든 Controller에 설정)
1-1) CORS Config 클래스 생성
( config.java )
package com.example.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration // 스프링 빈으로 등록
public class WebMvcConfig implements WebMvcConfigurer {
private final long MAX_AGE_SECS = 3600;
@Override
public void addCorsMappings(CorsRegistry registry) {
// 모든 경로에 대해
registry.addMapping("/**")
// Origin이 http:localhost:3000에 대해
.allowedOrigins("http://localhost:3000")
// GET, POST, PUT, PATCH, DELETE, OPTIONS 메서드를 허용한다.
.allowedMethods("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(MAX_AGE_SECS);
}
}
- WebMvcConfigurer 인터페이스: 스프링 MVC 설정을 그대로 가져와 추가로 설정할 수 있다.
- addCorsMappings 오버라이딩 : 어떤 출처(Origin)에 대해 CORS를 허락하고, 어떤 메서드에 대해 허락할지 명시하는 메서드이다.
- registry.addMapping("/**") : 모든 경로(/**)에 대해 출처(Origin)가 http://localhost:3000인 경우 GET, POST, PUT, PATCH, DELETE 메서드를 이용한 요청을 허용하고, 모든 헤더와 인증에 관한 정보도 허용한다는 의미이다.
위처럼 "/**" 와일드카드를 사용할 수도 있고, Ant-style Pattern도 지원한다.
인증이 필요한 페이지에서 접근권한을 요청하지 않도록 하기 위해 Ant Pattern을 사용
( Ant Pattern )
* 0개 이상의 문자와 매칭 ** 0개 이상의 디렉터리와 파일 매칭 ? 1개의 문자와 매칭 {spring:[a-z]+} 정규 문법 [a-z]+를 'spring'이라는 path variable과 매칭
- allowedOrigins : 자원 공유를 허락할 출처(Origin)를 지정 ("*")를 준다면 모든 출처(Origin)를 허용한다.
- allowedMethods : 허용할 HTTP method를 지정한다.
- allowCredentials : 쿠키 요청을 여부(다른 도메인 서버에 인증하는 경우에만 사용해야 하며, true 설정 시 보안상 이슈가 발생할 수 있다.)
- maxAge : 원하는 시간만큼 pre-flight 요청에 대한 응답을 브라우저에서 캐싱하는 시간
2. 설정 방법(특정 Controller에 설정)
@Controller
@CrossOrigin(origins = "http://localhost:8080")
public class SampleController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
- @CrossOrigin : Cross 오리진 설정
반응형
'Java' 카테고리의 다른 글
[Spring Boot] Spring Data JPA에서 Pageable사용한 Pagination 및 정렬 처리 방법 (0) | 2023.03.06 |
---|---|
[Spring Boot] RestTemplate/WebClient 사용한 REST API 호출 방법 (0) | 2023.02.11 |
[Spring Boot] Spring Security 패스워드 암호화 방법 (0) | 2022.10.26 |
[Spring Boot] Spring Security JWT를 사용한 토큰 인증 구현 (0) | 2022.10.25 |
JWT(JSON Web Token) 개념 및 구조 (0) | 2022.10.24 |