- 시큐리티의 CORS 필터, Spring의 CORS 방식
- CORS with Spring (MVC, Security)
- 스프링 MVC의 CORS 설정을 하면 자동적으로 Security에서 해당 CORS 설정을 사용하게 된다.

Spring MVC 방식
@Configuration public class WebConfig implements WebMvcConfigurer { private static final String ALLOWED_METHOD_NAMES = "GET,HEAD,POST,PUT,DELETE,TRACE,OPTIONS,PATCH"; @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedMethods(ALLOWED_METHOD_NAMES.split(",")) .exposedHeaders(LOCATION); } }
- addMaping: 해당 설정을 적용할 API 범위 선택 (/** -> 전체 적용)
- allowedOrigins: Origin을 허용할 범위 선택 (생략 시 *와 같은 의미로 전체 허용됨)
- allowedMethods: 허용할 HTTP 메서드 선택
- exposedHeader: 서버에서 반환할 헤더 지정

- 기존의 Spring MVC 방식으로 적용하였지만 CORS preflight 문제가 발생하게 된다.
- Security에서 CORS 필터를 적용함으로써 해결된다.
- MVC설정만 한다고 해서 Security에 적용이 되지 않는 것 같다.


- 토큰이 없어 401 코드가 내려온 모습
Preflight 테스트 방법

- 프리플라이트 양식에 맞지 않게 OPTIONS만 보낼 경우
- Origin : 프로토콜 + 호스트 + 포트
- Access-Control-Request-Method : 요청하려는 메서드 정보
- Access-Control-Request-Headers : 요청에 담길 헤더 정보

- OPTIONS 메서드에 대해 모두 열어준 경우
- 일단 Preflight의 경우 브라우저에 로직이 있기 때문에 OPTIONS 메서드에 대해 열어주기 않고 후에 문제가 된다면 변경하는 식으로 하면 될 것 같다.


결론
- 현재는 모든 origin에 대해서 열어주었지만 만약 프론트 origin이 정해진다면 해당 origin으로 변경해줘야 한다!