{"id":676,"date":"2014-12-10T06:00:29","date_gmt":"2014-12-10T06:00:29","guid":{"rendered":"http:\/\/blog.moramcnt.com\/?p=676"},"modified":"2014-12-10T06:01:09","modified_gmt":"2014-12-10T06:01:09","slug":"cors-cross-origin-resource-sharing-%ec%84%9c%eb%b9%84%ec%8a%a4%ea%b0%80-%eb%8b%a4%eb%a5%b8-%ed%81%ac%eb%a1%9c%ec%8a%a4%eb%8f%84%eb%a9%94%ec%9d%b8-%ed%95%b4%ea%b2%b0%eb%b0%a9%eb%b2%95","status":"publish","type":"post","link":"http:\/\/blog.moramcnt.com\/?p=676","title":{"rendered":"CORS (Cross-origin resource sharing) \uc11c\ube44\uc2a4\uac00 \ub2e4\ub978 \ud06c\ub85c\uc2a4\ub3c4\uba54\uc778 \ud574\uacb0\ubc29\ubc95"},"content":{"rendered":"<p>Ajax\uc5d0\uc11c \ud2b9\uc815 \uc11c\ube44\uc2a4 \ud638\ucd9c \uc2dc \ub3c4\uba54\uc778\uc774 \uc11c\ub85c \ub2e4\ub97c\uacbd\uc6b0, \uc815\uc0c1\uc801\uc778 \uc11c\ube44\uc2a4\ub97c \ud638\ucd9c\ud558\uae30 \uc704\ud574\uc11c\ub294 Spring MVC\uc758 \ud544\ud130\ub9c1\uc744 \uc774\uc6a9\ud558\uc5ec \ucc98\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>1. OncePerRequestFilter \ub97c \uc0c1\uc18d \ud544\ud130 \ud074\ub808\uc2a4 \uad6c\ud604<\/p>\n<pre class=\"lang:java decode:true\">package \ud328\ud0a4\uc9c0\uba85;\r\n\r\nimport java.io.IOException;\r\nimport javax.servlet.FilterChain;\r\nimport javax.servlet.ServletException;\r\nimport javax.servlet.http.HttpServletRequest;\r\nimport javax.servlet.http.HttpServletResponse;\r\nimport org.springframework.web.filter.OncePerRequestFilter;\r\n\r\npublic class CorsFilter extends OncePerRequestFilter {\r\n\r\n\t@Override\r\n    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)\r\n            throws ServletException, IOException {\r\n        response.addHeader(\"Access-Control-Allow-Origin\", \"*\");\r\n        if (request.getHeader(\"Access-Control-Request-Method\") != null &amp;&amp; \"OPTIONS\".equals(request.getMethod())); {\r\n            \/\/ CORS \"pre-flight\" request\r\n            response.addHeader(\"Access-Control-Allow-Methods\", \"GET, POST, PUT, DELETE\");\r\n            response.addHeader(\"Access-Control-Allow-Headers\", \"Authorization\");\r\n            response.addHeader(\"Access-Control-Max-Age\", \"1728000\");\r\n        }\r\n        filterChain.doFilter(request, response);\r\n    }\r\n}\r\n<\/pre>\n<p>2. web.xml\uc5d0 \ud544\ud130\ub85c \uc124\uc815<\/p>\n<pre class=\"lang:xhtml decode:true \" >\r\n  <filter>\r\n      <filter-name>corsFilter<\/filter-name>\r\n      <filter-class>\ud328\ud0a4\uc9c0.CorsFilter<\/filter-class> <!-- \ud544\ud130\uc704\uce58 -->\r\n  <\/filter>\r\n  <filter-mapping>\r\n      <filter-name>corsFilter<\/filter-name>\r\n      <url-pattern>\/data\/*<\/url-pattern> <!-- \uc11c\ube44\uc2a4\ud560 \ub514\ub809\ud1a0\ub9ac \uc124\uc815 -->\r\n  <\/filter-mapping><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Ajax\uc5d0\uc11c \ud2b9\uc815 \uc11c\ube44\uc2a4 \ud638\ucd9c \uc2dc \ub3c4\uba54\uc778\uc774 \uc11c\ub85c \ub2e4\ub97c\uacbd\uc6b0, \uc815\uc0c1\uc801\uc778 \uc11c\ube44\uc2a4\ub97c \ud638\ucd9c\ud558\uae30 \uc704\ud574\uc11c\ub294 Spring MVC\uc758 \ud544\ud130\ub9c1\uc744 \uc774\uc6a9\ud558\uc5ec \ucc98\ub9ac\ud560 \uc218 \uc788\ub2e4. 1. OncePerRequestFilter \ub97c \uc0c1\uc18d \ud544\ud130 \ud074\ub808\uc2a4 \uad6c\ud604 package \ud328\ud0a4\uc9c0\uba85; import java.io.IOException; 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 CorsFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-676","post","type-post","status-publish","format-standard","hentry","category-1"],"_links":{"self":[{"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/posts\/676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=676"}],"version-history":[{"count":12,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/posts\/676\/revisions"}],"predecessor-version":[{"id":726,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/posts\/676\/revisions\/726"}],"wp:attachment":[{"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=676"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}