티스토리 뷰

반응형

CORS(Cross Origin Resource Sharing)_크로스도메인 이슈 서버단(Spring3.0) 해결 (filter 사용)

IE 에러로그

SEC7118: 의 XMLHttpRequest에는 CORS(Cross Origin Resource Sharing)가 필요합니다.

SEC7119: 의 XMLHttpRequest에는 CORS 실행 전 항목이 필요합니다.

SCRIPT7002: XMLHttpRequest: 네트워크 오류 0x80070005, 액세스가 거부되었습니다.

SCRIPT5022: NetworkError


CORS 문제를 해결하기 위해 우선 서버쪽 Origin을 모두 허용하는 방식을 수정

1. @CrossOrigin 어노테이션을 이용하여 간편하게 바꾸는 방식인데 Spring4.0 부터 지원하여 사용 불가


2. filter를 이용하는 방법

아무곳이나 클래스파일 만듦

CORSFilter.class


import java.io.IOException;


import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


public class CORSFilter implements Filter{


@Override

public void destroy() {

// TODO Auto-generated method stub

}


public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

        HttpServletResponse response = (HttpServletResponse) res;

        HttpServletRequest request= (HttpServletRequest) req;  

                  response.setHeader("Access-Control-Allow-Origin", "*");

                  response.setHeader("Access-Control-Allow-Methods", "*");

                  

                  //response.setHeader("Access-Control-Allow-Headers", "x-requested-with");

                  //response.setHeader("Access-Control-Expose-Headers", "x-requested-with"); 

                  chain.doFilter(req, res);

        }


@Override

public void init(FilterConfig arg0) throws ServletException {

// TODO Auto-generated method stub

}


}




web.xml

<filter>

    <filter-name>cors</filter-name>

    <filter-class>패키지.클래스명</filter-class>   <!-- class 위치 -->

</filter>

<filter-mapping>

    <filter-name>cors</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>




응답 헤더서 확인



끗!!!!!!!!!!




반응형