티스토리 뷰

반응형

출처 : http://wizardee.tistory.com/141


ajax에서 외부서버에 접속하려 할 경우에 아래와 같은 메세지를 볼 수가 있다.

XMLHttpRequest cannot load http://xx.xx.xx.xx/xxx.jsp. Request header field Content-Type is not allowed by Access-Control-Allow-Headers.


이는 ajax에서는 내부적으로 같은 도메인의 서버에서만 URL접속을 할 수 있도록 되어 있어서 그런데 이를 해결하기 위해서는 접속하려는 웹서버(여기서는 톰캣)에서 아래와 같이 응답헤더를 설정을 해 주면,

다른 서버에서 접속요청하는 ajax 요청을 처리할 수 있다.


response.addHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Headers", "origin, x-requested-with, content-type, accept");


좀더 자세히 말하면,

우선 Filter를 상속받은 클래스를 하나 정의해서 거기에 위의 코드를 넣는다.






EX)



CrossDomainFilter.java

접기

package util.filter;

public class CrossDomainFilter implements Filter {

@Override

public void destroy() {

// TODO Auto-generated method stub

}


@Override

public void doFilter(ServletRequest request, ServletResponse servletResponse,

FilterChain chain) throws IOException, ServletException {

// TODO Auto-generated method stub

if (!(request instanceof HttpServletRequest)) {

throw new ServletException("This filter can "

+ " only process HttpServletRequest requests");

}

HttpServletResponse response = (HttpServletResponse) servletResponse;

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

response.setHeader("Access-Control-Allow-Headers", "origin, x-requested-with, content-type, accept");

chain.doFilter(request, response);

}


@Override

public void init(FilterConfig arg0) throws ServletException {

// TODO Auto-generated method stub

}

}

접기


web.xml

접기

 <filter>

    <filter-name>CrossDomainFilter</filter-name>

    <filter-class>util.filter.CrossDomainFilter</filter-class>

  </filter>

  <filter-mapping>

    <filter-name>CrossDomainFilter</filter-name>

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

  </filter-mapping>


반응형

'Programming > JAVA' 카테고리의 다른 글

안드로이드 개발툴 설치하기  (0) 2013.03.02
Eclipse Heap 영역 넓히기  (0) 2013.02.26
JAVA DeComplier  (0) 2009.08.11
jsp & JAVA 코딩 가이드(펌)  (0) 2009.08.10
서울 자바 FX관련 세미나  (0) 2009.05.25
공지사항