jQuery.ajax() 크로스도메인(crossdomain) 허용 설정 in java web application
2017. 9. 18. 13:19ㆍ모두모두 개발자다요/JAVA
[Client (HTML + javascript(jQuey))]
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script> <script type="text/javascript"> $.ajax({ type : 'GET', contentType : 'application/json', url : 'http://externalUrl', dataType : 'json', success : function (res) { ... }, error : function (res, status, err) { ... } }); </script>
서로 다른 도메인의 request client 와 response server 서버 간의 ajax 통신 할 때(또는 client 쪽의 웹서버 설정 자체가 없는 경우) crossdomain 이슈 때문의 다음과 같은 클라이언트 쪽의 오류가 발생할 수 있다.
XMLHttpRequest cannot load http://externalUrl.
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://clientWebServerUrl (웹서버가 없는 경우 null)' is therefore not allowed access.
크로스도메인 ajax 요청 허용 설정 방법
http://externalUrl 의 response Server 쪽에 다음과 같은 필터 설정으로 크로스도메인 요청 허용 설정이 가능하다.
[Server (java)]
CrossDomainFilter.java ( implements javax.servlet.Filter )
... ... @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "*"); //허용할 Origin(요청 url) : "*" 의 경우 모두 허용 response.setHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, PUT"); //허용할 request http METHOD : POST, GET, DELETE, PUT response.setHeader("Access-Control-Max-Age", "3600"); //브라우저 캐시 시간(단위: 초) : "3600" 이면 최소 1시간 안에는 서버로 재요청 되지 않음 response.setHeader("Access-Control-Allow-Headers", "X-Requested-With"); //요청 허용 헤더(ajax : X-Requested-With) // (cf. 요청 허용 헤더 : "Origin,Accept,X-Requested-With,Content-Type,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization") chain.doFilter(req, res); } ... ...
web.xml
... ... <filter> <filter-name>CrossDomainFilter</filter-name> <filter-class>your.java.package.CrossDomainFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CrossDomainFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ... ...
반응형
'모두모두 개발자다요 > JAVA' 카테고리의 다른 글
Spring MVC - RedirectAttributes (Spring 3.1 이상) (0) | 2018.09.23 |
---|---|
리스트 (또는 배열) 순서 섞기 (shuffle) (0) | 2018.03.27 |
이클립스 Search 결과 파일 새 창으로 오픈 설정 (0) | 2017.06.27 |
maven spring-boot run (port 옵션) (0) | 2017.03.30 |
spring security : 로그인 https 적용 (0) | 2015.09.03 |