Cors 란 무엇인가 ?
현재 IP 가 다른 IP 로 리소스를 요청하는 구조에 대응하는 정책이다.
Cors 는 웹 상에 있어 하나의 보안 정책이다.
하지만 처음 겪으면 너무 당황스럽고 까다로운 보안 정책이지만 개념을 알고나면 잘 해결 할 수 있다!
WEB CROS 허용 설정 (Vue -> API)
성공 기록 CROS 는 이 블로그로 조금 이해를 얻었다. 요청시 Origin 에 요청 url 이 들어가고 응답해주는 응답에서는 Access Control Allow Origin 에는 요청을 허용해주는 url 이 들어가야 한다. 프론트에서
soobindeveloper8.tistory.com
Cors 핵심용어
Origin
Origin은 요청이 시작된 서버의 위치를 나타내는문구이다.
SOP
SOP는 Same Origin Policy를 뜻한다.
Same Origin Policy란? 2011년 RFC 6454에서 등장한 보안 정책으로 동일한 출처의 Origin만 리소스를 공유할 수 있다.
Access-Control-Allow-Origin
이 Access-Control-Allow-Origin은 바로 Cors 에 대상 리소스를 명시해 줄 수 있다.
Cors 의 과정
- HTTP 통신 헤더인 Origin 헤더에 요청을 보내는 곳의 정보를 담고 서버로 요청을 보낸다.
- 이후 서버는 Access-Control-Allow-Origin헤더에 허용된 Origin이라는 정보를 담아 보낸다
- 클라이언트는 헤더의 값과 비교해 정상 응답임을 확인하고 지정된 요청을 보낸다.
- 서버는 요청을 수행하고 200OK 코드를 응답한다.
Spring Code 로 Cors 대응
addMapping
Cors 를 적용할 URL 패턴 정의
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
}
allowedOrigins
자원 공유 허락할 Origin 지정
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*");
}
allowedMethods
허용할 HTTP method를 지정
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST");
}
maxAge
원하는 시간만큼 캐싱
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST")
.maxAge(3000);
}
Annotation 이용하기
CrossOrigin 어노테이션을 이용하면 허용할 origins, methods 지정 가능
@RequestMapping("/somePath")
@CrossOrigin(origins = "*", allowedHeaders = "*")
public class SomeController {
@CrossOrigin(origins="*")
@RequestMapping(value = "/{something}",method = RequestMethod.DELETE)
public ResponseEntity<String> delete(@PathVariable Long reservationNo) throws Exception{
}
}
참조사이트
'개발중 > Spring' 카테고리의 다른 글
[Spring] 다이나믹 프록시(dynamic Proxy) (0) | 2023.03.04 |
---|---|
[Spring] OAuth2.0 개념 및 작동방식 (0) | 2023.02.25 |
Sql Mapper (mybatis) 의 단점 요약 ! (0) | 2023.02.04 |
[Spring] Spring Bean 에 대한 기록 (0) | 2023.02.01 |
[Spring] 스프링 생성자 주입 방법 3가지 (1) | 2023.01.20 |