Spring과 React 통신 시에 CORS 에러 해결

2021. 6. 10. 22:08·프로그래밍/기타

학원 프로젝트중에 Spring과 React를 같이 쓸려고 하는데 CORS에러가 발생했다.

 

구글링 해 본 결과, SpringBoot와 React를 연결하여 Spring Security로 CORS를 해결하는게 대다수였다.

 

특히 나처럼 국비지원을 하는사람들은 SpringBoot를 안(못?)쓰는 경우가 많을텐데

 

해결방법을 공유하려한다

 

방법을 작성하기전에 한가지 말하고 싶은게 있다면

 

굳이 Spring Security를 쓰려고 시도하지 않아도 된다!

 

에러를 해결하는 방법은 간단할수록 좋은게 아닐까?

 

다른 사람들이 Security로 해결한다고 해서 나까지 똑같이 따라할 필요는 없다.

 

이런 당연한 사실을 간과하고 나는 이틀 내내 Security를 사용하려고 발버둥쳤다....

 

여튼 이제 코드를 써보겠다.

 

Filter를 통해서 response 설정을 해주면 된다.

public class LogFilter implements Filter {

	private Logger logger = LoggerFactory.getLogger(LogFilter.class);

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {

		HttpServletRequest req = (HttpServletRequest) request;

		String remoteAddr = req.getRemoteAddr();
		String uri = req.getRequestURI();
		String url = req.getRequestURL().toString();
		String queryString = req.getQueryString();

		String referer = req.getHeader("referer");
		String agent = req.getHeader("User-Agent");

		StringBuffer sb = new StringBuffer();
		sb.append("\n* remoteAddr : " + remoteAddr) // ip 주소
				.append("\n* uri : " + uri) // http 요청 url 중에 queryString까지 반환 (context path)
				.append("\n* url : " + url) // protocol + servername + portnumber + serverpath
				.append("\n* queryString : " + queryString) // 경로 뒤에 있는 요청 쿼리 문자열 (key=value 형태)
				.append("\n* referer : " + referer) // 이전 페이지의 url (getHeader : 지정한 요청 헤더값을 문자열로 반환)
				.append("\n* agent : " + agent) // 사용자 정보 (browser version, os 등)
				.append("\n");

/************** 바로 이부분을 추가해주면 된다. **********************/
		HttpServletResponse resp = (HttpServletResponse) response;
		// req.getHeader("Origin") -> http://localhost:3000
		
		resp.setHeader("Access-Control-Allow-Origin", req.getHeader("Origin"));
	    resp.setHeader("Access-Control-Allow-Credentials", "true");
		resp.setHeader("Access-Control-Allow-Methods", "GET, POST");
		resp.setHeader("Access-Control-Max-Age", "10");
		resp.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me");
/********************************************************************/
		logger.info("\nLOG Filter" + sb);

		chain.doFilter(req, response);
		// 다음에 존재하는 필터가 있으면, 그 필터가 실행될 수 있도록 chaining!
		// request에 들어있는 정보를 읽어서 log.info한 것!

	}

	@Override
	public void destroy() {

	}

}

위의 코드에서 중요한것은

Access-Control-Allow-Origin인데

지금은 들어오는 요청을 다 허용하려고 req.getHeader("Origin")이라고 작성했지만

주석에 써놓은것처럼 http://localhost:3000 이런식으로 바꿔줘야한다.

주의할 점은 주소 뒤에 /를 붙이면 안된다.

/를 붙이는순간 최상위루트라고 인식을 해버려서 에러를 내는것같다.

 

 

LogFilter를 만들어주고 web.xml에 연결시켜주면 된다.

	// web.xml
    <filter>
		<filter-name>logFilter</filter-name>
		<filter-class>com.kh.swith.common.filter.LogFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>logFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

 

끝!

 

반응형
저작자표시 (새창열림)

'프로그래밍 > 기타' 카테고리의 다른 글

[Vue.js] click 이벤트 submit 새로고침 방지  (0) 2022.01.27
Vue 2에서 vue-cli 대신 Vite 사용하기  (0) 2022.01.16
[nods.js] Express로 서버 구축하기 (w/o Generator) - 1  (0) 2021.10.08
[CSS] 말줄임 표시 하는 방법  (0) 2021.10.04
[Android] ViewBinding 을 써야하나..?  (0) 2021.09.27
'프로그래밍/기타' 카테고리의 다른 글
  • Vue 2에서 vue-cli 대신 Vite 사용하기
  • [nods.js] Express로 서버 구축하기 (w/o Generator) - 1
  • [CSS] 말줄임 표시 하는 방법
  • [Android] ViewBinding 을 써야하나..?
Giwonnnnnnn
Giwonnnnnnn
개발, 일상 등 나에 대한 모든 것을 기록합니다.
  • Giwonnnnnnn
    기록하는 곳
    Giwonnnnnnn
  • 전체
    오늘
    어제
    • 분류 전체보기 (85)
      • 프로그래밍 (32)
        • 객체지향 설계 (6)
        • git (1)
        • Network (2)
        • 후기 (2)
        • 기타 (10)
        • 발생한 에러들 (11)
      • Language (18)
        • Java (0)
        • Python (2)
        • JavaScript (13)
        • TIL (3)
      • 알고리즘 (11)
      • BackEnd (7)
        • 데이터베이스 (1)
        • Nest.js (4)
        • Node.js (2)
      • 자격증 공부 (1)
        • 정보처리기사 (0)
      • 영어공부 (3)
        • 문법 기초 (3)
      • Cloud (3)
        • GCP (3)
      • 일상 (5)
        • 리뷰 (2)
        • 맛집 탐방 (1)
        • 일상 (2)
        • 일기장 (0)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • Github
    • LinkedIn
    • Instagram
  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    java
    자바
    JavaScript
    오브젝트
    Object
    프로그래머스
    파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Giwonnnnnnn
Spring과 React 통신 시에 CORS 에러 해결
상단으로

티스토리툴바