본문 바로가기
Server/WAS

Tomcat8.5 + SpringBoot CORS 문제 해결

by 오늘의개발부 2021. 9. 10.
반응형

환경은 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