spring security cors
- 작성자 :
- 박*원
- 작성일 :
- 2021-01-13 11:55:20
- 조회수 :
- 6,534
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
안녕하세요, 표준프레임워크 통합다운로드를 받아 사용하고 있으며 필요한 공통 컴포넌트들을 받아서 기초 환경을 구축했습니다.
(다운받은 공통 컴포넌트는 이미지로 첨부 했습니다.)
현재 개발 환경은 React + egov web 프로젝트 입니다.
드리고 싶은 질문은 spring security 쪽 cors입니다.
리액트 쪽 기본 url인 'localhost:3000'에서 egov 쪽 url 'http://localhost:8080/test/test.do'로 접속하려니
cross-origin (Reason: CORS header ‘Access-Control-Allow-Origin’ missing)이 발생합니다.
네트워크 쪽에서 확인해 보니 403 forbidden 에러가 보이구요.
get방식을 사용하면 통신이 됩니다. post방식으로 통신하려고 하면 egov쪽 로그에
[log4j]2021-01-13 11:43:54,202 INFO [egovframework.com.sec.security.filter.EgovSpringSecurityLoginFilter] EgovSpringSecurityLoginFilter called...
[log4j]2021-01-13 11:43:54,202 DEBUG [egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper] ## authentication object is null!!
이 두 줄만 찍히고 통신이 안됩니다.
tomcat server의 web.xml, 프로젝트의 web.xml에 하단의 CorsFilter도 넣어놨습니다.
<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>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
어노니머스 사용자의 권한이 문제인가 싶어서 사용하고자 하는 롤 정보와 권한도 등록 했습니다.
혹시나 egov 프로젝트 내부에서도 post방식으로 통신이 안되고 있는건가 싶어서
form의 post방식, ajax post방식을 사용하여 통신을 해봤는데, 내부에서는 잘 됩니다.
localhost:3000과 localhost:8080의 cross-origin 문제는 맞는 것 같은데
get방식은 되고 post방식은 안돼서 혹시 전자정부쪽 secutiry에서 뭔가 처리하는게 있는지, 해결방법이 있는지 여쭤보고 싶습니다..
(다운받은 공통 컴포넌트는 이미지로 첨부 했습니다.)
현재 개발 환경은 React + egov web 프로젝트 입니다.
드리고 싶은 질문은 spring security 쪽 cors입니다.
리액트 쪽 기본 url인 'localhost:3000'에서 egov 쪽 url 'http://localhost:8080/test/test.do'로 접속하려니
cross-origin (Reason: CORS header ‘Access-Control-Allow-Origin’ missing)이 발생합니다.
네트워크 쪽에서 확인해 보니 403 forbidden 에러가 보이구요.
get방식을 사용하면 통신이 됩니다. post방식으로 통신하려고 하면 egov쪽 로그에
[log4j]2021-01-13 11:43:54,202 INFO [egovframework.com.sec.security.filter.EgovSpringSecurityLoginFilter] EgovSpringSecurityLoginFilter called...
[log4j]2021-01-13 11:43:54,202 DEBUG [egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper] ## authentication object is null!!
이 두 줄만 찍히고 통신이 안됩니다.
tomcat server의 web.xml, 프로젝트의 web.xml에 하단의 CorsFilter도 넣어놨습니다.
<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>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
어노니머스 사용자의 권한이 문제인가 싶어서 사용하고자 하는 롤 정보와 권한도 등록 했습니다.
혹시나 egov 프로젝트 내부에서도 post방식으로 통신이 안되고 있는건가 싶어서
form의 post방식, ajax post방식을 사용하여 통신을 해봤는데, 내부에서는 잘 됩니다.
localhost:3000과 localhost:8080의 cross-origin 문제는 맞는 것 같은데
get방식은 되고 post방식은 안돼서 혹시 전자정부쪽 secutiry에서 뭔가 처리하는게 있는지, 해결방법이 있는지 여쭤보고 싶습니다..
A
안녕하세요.
표준프레임워크센터 입니다.
Ajax 통신시에
호출하는 곳과 응답하는곳이
동일한 도메인과 포트를 사용하는경우 아니라면
CORS문제가 발생합니다.
핵심은 첨부하신 메시지처럼
헤더에 Access-Control-Allow-Origin에 대한 정의값이 없어서 입니다.
cross-origin (Reason: CORS header ‘Access-Control-Allow-Origin’ missing
Tomcat의 설정은 센터에서 확인된것은 없습니다.
이경우 Filter를 적용하여 처리할수 있습니다.
프로젝트에 있는 web.xml에서
Access-Control-Allow-Origin 속성을 추가할수 있는 Filter를 적용하면
해결이 가능합니다.
감사합니다.
표준프레임워크센터 입니다.
Ajax 통신시에
호출하는 곳과 응답하는곳이
동일한 도메인과 포트를 사용하는경우 아니라면
CORS문제가 발생합니다.
핵심은 첨부하신 메시지처럼
헤더에 Access-Control-Allow-Origin에 대한 정의값이 없어서 입니다.
cross-origin (Reason: CORS header ‘Access-Control-Allow-Origin’ missing
Tomcat의 설정은 센터에서 확인된것은 없습니다.
이경우 Filter를 적용하여 처리할수 있습니다.
프로젝트에 있는 web.xml에서
Access-Control-Allow-Origin 속성을 추가할수 있는 Filter를 적용하면
해결이 가능합니다.
감사합니다.