반응형
환경은 SpringBoot의 내장톰캣을 이용하지 않고 톰캣 서버를 별도로 설치하여 그 안에서 스프링부트 앱을 올리는 구조였다.
프로젝트의 API를 프론트개발 쪽에서 호출해야 하는데 CORS 문제가 있어 Spring Security에서 CORS 관련 코드를 추가하여 해결했다.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
...
.and()
.cors().configurationSource(corsConfigurationSource())
.and()
...
}
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.addAllowedOrigin("*");
configuration.addAllowedHeader("*");
configuration.addAllowedMethod("*");
configuration.setAllowCredentials(true);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
이렇게 하니 서버의 API는 정상적으로 호출됐다.
그런데 static resource를 호출할 때는 여전히 CORS 문제가 있었다.
그래서 tomcat의 config/web.xml에 다음을 추가했다.
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
이렇게 하니 static resource 호출도 해결
된 줄 알았는데
다시 API가 호출되지 않았다.
메세지는 조금 달랐다
....Access-Control-Allow-Origin' header contains multiple values....
구글링해보니 중복된 cors 설정때문이라고 한다.
톰캣에서도 cors 설정을 하고 스프링에서도 하니 Access-Control-Allow-Origin가 header에 두번 붙게 된다는 것이다.
어차피 톰캣에서 CORS 요청을 모두 허용해주니 Spring Security 코드의 설정을 다시 삭제했다.
그리고 API나 static resource들 모두 호출이 잘 되는 것을 확인했다.
반응형
'Server > WAS' 카테고리의 다른 글
[Tomcat, HTTPS] 톰캣에서 https 사용하기 (2) | 2020.01.13 |
---|