반응형
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를 상속받은 클래스를 하나 정의해서 거기에 위의 코드를 넣는다.
CrossDomainFilter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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 } } | cs |
그리고, web.xml 에 위의 필터를 추가
web.xml
1 2 3 4 5 6 7 8 | <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> | cs |
반응형
'IT > 언어' 카테고리의 다른 글
BSON 이해하기 (0) | 2014.05.14 |
---|---|
텍스트 파일 입출력 Example (0) | 2014.01.27 |
log4j 에서 ibatis 쿼리 로그 남기는 방법 (0) | 2013.11.26 |
spring 강좌 (2) (0) | 2013.11.26 |
DAO, JavaBean, 리펙토링 (0) | 2013.11.26 |