프로그램/Java

spring cross-domain filter

milktea.kang 2014. 7. 22. 14:54

Access-Control-Allow-Origin 이놈이 뭐시기 뭐시기 그러면서 오류가 나온다면 99% cross domain 문제라고 보고...

stackoverflow에 검색하면 나오는 내용인데 양키놈이 시키는대로 하니까 안되는구만

내가 뭘 잘 못 한건지 모르겠다

Interceptor를 등록해서 사용하는 방식도 있고 Filter를 사용하는 방식도 있지만

일단 Filter를 이용해서 web.xml에 클래스를 직접 지정해서 사용하는 방식으로 GOGO



우선 Filter class를 만들고

import java.io.IOException;


import org.slf4j.Logger;

import org.slf4j.LoggerFactory;


import javax.servlet.FilterChain;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.springframework.web.filter.OncePerRequestFilter;



public class MyFilter extends OncePerRequestFilter {

  private static final Logger logger = LoggerFactory.getLogger(BigDipperFilter.class);

  

  @Override

  protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)

      throws ServletException, IOException {

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

    if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) {

        // CORS "pre-flight" request

        response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");

        response.addHeader("Access-Control-Allow-Headers", "X-Requested-With,Origin,Content-Type, Accept");

    }

    filterChain.doFilter(request, response);

  }

}


/WEB-INF/web.xml 에 등록

    <filter>

        <filter-name>MyFilter</filter-name>

        <filter-class>your.package.url.MyFilter</filter-class>

    </filter>


    <filter-mapping>

        <filter-name>MyFilter</filter-name>

        <url-pattern>*.do</url-pattern>

    </filter-mapping>


테스트 결과 아주 잘 돌아감!

안된다고 우기지 말고~!