Spring Security Cross Domain
프로젝트를 하다보면 항상 마주하는 Cross Domain 문제
이번에도 어김없이 문제가 생겼다.
같은 서버에서 포트가 다른 두개의 웹서버가 있고, 한 웹 서버에서 다른 웹 서버가 관리하는 이미지를 불러올때 발생하는 문제였다.
항상 발생하는데 적어두질 않으니 매번 찾아보기를 반복한다.
그래서 찾으면서 해결? 조치 방법을 기록해놓았다.
1. CORS 는 HTTP Header 의 OPTIONS 요청은 무시한다? </br>HTTPMethod.OPTIONS 를 허용해보았다. </br>결과는.. </br>아무 상관이 없었다..
2. CorsFilter 를 추가? </br>인증과정을 거치기전에 Filter 를 추가해서 사전에 CORS 검사를 해보았다. </br>이쯤에서 해결되면 다행이다. </br>하지만… </br>역시나 안된다. 무엇이 문제일까..
3. 같은 도메인 혹은 같은 아이피에서 쿠키를 공유함에 있어서 생기는 문제? </br>이번에 처음 겪게된 경우다. </br>스택오버플로우에서 검색하고 찾아봐서 이리저리 해봐도 안되던게 단지 서버에서 관리되는 쿠키 때문이었다. </br>그래서 curl 요청 시 쿠키를 제거하고 요청하니 CORS 에러가 발생하지 않는것이었다!
해결 / 조치 : </br>어렵지 않았다. 단지 이미지를 제공해주는 웹서버에서 세션관리를 STATELESS 하게 하면된다.
소스 코드 :
/**
* Web Security Config
*/
@Override
public void configure (WebSecurity web) throw Exception {
web.ignore().antMatcher("${URL_PATH}");
}
@Override
protected void configure (HttpSecurity http) throw Exception {
http
.csrf().disable()
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS); // 중요!
}
/**
* Web MVC Config (CORS 등록)
*/
@Override
public void addCorsRegistry (CorsRegistry registry) {
registry
.addMapping("/*")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "OPTIONS", "PUT")
.allowedHeaders("Content-Type", "X-Requested-With", "accept", "Origin","Access-Control-Request-Method", "Access-Control-Request-Headers")
.exposedHeaders("Access-Control-Allow-Origin", "Access-Control-Allow-Credentials")
.allowCredentials(true)
.maxAge(3600);
}
댓글남기기