728x90
반응형
Cors 란 무엇인가 ?
현재 IP 가 다른 IP 로 리소스를 요청하는 구조에 대응하는 정책이다.
Cors 는 웹 상에 있어 하나의 보안 정책이다.
하지만 처음 겪으면 너무 당황스럽고 까다로운 보안 정책이지만 개념을 알고나면 잘 해결 할 수 있다!
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{
}
}
참조사이트
728x90
반응형
'개발중 > 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 |