{"id":7620,"date":"2017-12-24T01:01:39","date_gmt":"2017-12-23T16:01:39","guid":{"rendered":"https:\/\/52.185.133.111\/?p=7620"},"modified":"2020-06-10T09:33:52","modified_gmt":"2020-06-10T00:33:52","slug":"spring%e3%81%ab%e3%82%88%e3%82%8bcross-origin-resource-sharing","status":"publish","type":"post","link":"https:\/\/tech-lab.sios.jp\/archives\/7620","title":{"rendered":"Spring\u306b\u3088\u308bCross Origin Resource Sharing"},"content":{"rendered":"<p>\u3053\u3093\u306b\u3061\u306f\u3002\u30b5\u30a4\u30aa\u30b9\u30c6\u30af\u30ce\u30ed\u30b8\u30fc\u6b66\u4e95\u3067\u3059\u3002<\/p>\n<p>\u4eca\u56de\u306f\u3001Spring Boot\u306b\u3066\u3001Cross Origin Resource Sharing(\u4ee5\u964d\u3001CORS)\u3092\u884c\u3046\u65b9\u6cd5\u3092\u66f8\u3044\u3066\u307f\u307e\u3059\u3002<\/p>\n<p>\u307e\u305a\u3001\u305d\u306e\u524d\u306b\u3001CORS\u3068\u306f\u3069\u3046\u3044\u3046\u3082\u306e\u304b\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n<h2>Cross Origin Resource Sharing\u3068\u306f\uff1f<\/h2>\n<p>\u57fa\u672c\u7684\u306bJava Script\u306b\u3088\u308bHTTP\u901a\u4fe1(XMLHttpRequest\u306b\u3088\u308bAjax\u901a\u4fe1)\u306f\u3001Same Origin Policy\u304c\u9069\u7528\u3055\u308c\u307e\u3059\u3002\u65e5\u672c\u8a9e\u3067\u8a00\u3046\u3068\u540c\u4e00\u751f\u6210\u5143\u30dd\u30ea\u30b7\u30fc\u306b\u306a\u308a\u307e\u3059\u3002\u3064\u307e\u308a\u3001Ajax\u901a\u4fe1\u3092\u884c\u3046Java Script\u304c\u3042\u308b\u30b5\u30a4\u30c8\u306eURL\u304c\u3001https:\/\/www.sios.com\/\u3068\u3057\u307e\u3059\u3002\u3053\u306eJava Script\u304c\u3001https:\/\/api.example.com\/messages\/\u3068\u3044\u3046URL\u306eAPI\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3088\u3046\u3068\u3059\u308b\u3068\u3001Same Origin Policy\u306b\u9055\u53cd\u3057\u3066\u3001\u30a2\u30af\u30bb\u30b9\u304c\u62d2\u5426\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u3069\u3046\u3057\u3066\u3001\u3053\u306e\u3088\u3046\u306a\u5236\u7d04\u3092\u8a2d\u3051\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3068\u3044\u3046\u3068\u3001\u305d\u308c\u306f\u30af\u30ed\u30b9\u30b5\u30a4\u30c8\u30ea\u30af\u30a8\u30b9\u30c8\u30d5\u30a9\u30fc\u30b8\u30a7\u30ea(CSRF)\u5bfe\u7b56\u306e\u305f\u3081\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n<h2>CSRF\u3068\u306f\uff1f<\/h2>\n<p>\u4f8b\u3048\u3070\u3001A\u3055\u3093\u3068\u3044\u3046\u30e6\u30fc\u30b6\u30fc\u304c\u3044\u307e\u3059\u3002\u3053\u306eA\u3055\u3093\u306f\u3001\u697d\u3057\u3044\u304a\u8cb7\u3044\u7269.com\u3068\u3044\u3046\u30b7\u30e7\u30c3\u30d4\u30f3\u30b0\u30b5\u30a4\u30c8\u306e\u611b\u597d\u8005\u3067\u3059\u3002<\/p>\n<p>A\u3055\u3093\u306f\u3001\u3044\u3064\u3082\u306e\u3088\u3046\u306b\u3001\u697d\u3057\u3044\u304a\u8cb7\u3044\u7269.com\u3067\u697d\u3057\u304f\u304a\u8cb7\u3044\u7269\u3092\u3057\u3066\u307e\u3057\u305f\u3002\u304a\u8cb7\u3044\u7269\u30b5\u30a4\u30c8\u306f\u3001\u30a2\u30af\u30bb\u30b9\u3057\u3066\u304d\u305f\u30e6\u30fc\u30b6\u30fc\u306b\u3088\u3063\u3066\u3001\u898b\u305b\u308b\u60c5\u5831\u304c\u7570\u306a\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u30b7\u30e7\u30c3\u30d4\u30f3\u30b0\u30ab\u30fc\u30c8\u306e\u4e2d\u306b\u5165\u3063\u3066\u308b\u5546\u54c1\u306f\u30e6\u30fc\u30b6\u30fc\u306b\u3088\u3063\u3066\u7570\u306a\u308a\u307e\u3059\u3002\u306a\u306e\u3067\u3001\u30e6\u30fc\u30b6\u30fc\u3092\u8b58\u5225\u3059\u308b\u306e\u306b\u30bb\u30c3\u30b7\u30e7\u30f3\u3068\u3044\u3046\u4ed5\u7d44\u307f\u3092\u7528\u3044\u307e\u3059\u3002\u901a\u5e38\u3001\u30bb\u30c3\u30b7\u30e7\u30f3ID\u306fCookie\u306e\u4e2d\u306b\u4fdd\u5b58\u3055\u308c\u3001\u30a2\u30af\u30bb\u30b9\u306e\u90fd\u5ea6\u3001HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u306eCookie\u30d8\u30c3\u30c0\u30fc\u306b\u4e57\u305b\u3066\u3001\u30b5\u30a4\u30c8\u306b\u6e21\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u305d\u3053\u3067\u3001\u60aa\u610f\u306e\u3042\u308b\u30e6\u30fc\u30b6\u30fc\u304c\u3001\u81ea\u5206\u306e\u30b5\u30a4\u30c8\u306b\u4ee5\u4e0b\u306eHTML\u3092\u7f6e\u3044\u305f\u3068\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n&lt;script language=&quot;javascript&quot;&gt;\r\n  var req req = new XMLHttpRequest();\r\n  if (req) {\r\n    req.open(&#039;GET&#039;, &#039;https:\/\/\u697d\u3057\u3044\u304a\u8cb7\u3044\u7269.com\/cart&#039;); \/\/ (1) \u697d\u3057\u3044\u304a\u8cb7\u3044\u7269\u30b5\u30a4\u30c8.com\u306e\u30b7\u30e7\u30c3\u30d4\u30f3\u30b0\u30ab\u30fc\u30c8\u8868\u793a\r\n    req.onreadystatechange = function() {\r\n      if (req.readyState == 4) {\r\n        sendMail2Attacker(req.responseText); \/\/ \u60aa\u610f\u3042\u308b\u4eba\u3078\u306e\u30e1\u30fc\u30eb\u9001\u4fe1\r\n      }\r\n    }\r\n    req.send(null);\r\n  }\r\n&lt;\/script&gt;\r\n<\/pre>\n<p>\u3082\u306e\u3059\u3054\u304f\u9069\u5f53\u306aJava Script\u3067\u3059\u307f\u307e\u305b\u3093\u3002<\/p>\n<p>\u60aa\u610f\u306e\u3042\u308b\u30e6\u30fc\u30b6\u30fc\u306f\u3001\u5de7\u307f\u306a\u624b\u6bb5\u3067\u3001\u4f8b\u3048\u3070\u30e1\u30fc\u30eb\u306a\u3069\u306b\u3053\u306e\u30b5\u30a4\u30c8\u306e\u30ea\u30f3\u30af\u3092\u8cbc\u308a\u4ed8\u3051\u308b\u306a\u3069\u3057\u3066\u3001A\u3055\u3093\u306b\u3053\u306e\u30b5\u30a4\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3055\u305b\u305f\u3068\u3057\u307e\u3059\u3002<\/p>\n<p>\u3059\u308b\u3068\u3001\u30e6\u30fc\u30b6\u30fcA\u3055\u3093\u304c\u304a\u8cb7\u3044\u7269\u30b5\u30a4\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3057\u305f\u5f8c\u306b\u3001\u60aa\u610f\u306e\u3042\u308b\u30e6\u30fc\u30b6\u30fc\u304c\u7528\u610f\u3057\u305f\u30da\u30fc\u30b8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\u3001\u30b7\u30e7\u30c3\u30d4\u30f3\u30b0\u30ab\u30fc\u30c8\u306e\u4e2d\u8eab\u304c\u3001\u60aa\u610f\u306e\u3042\u308b\u4eba\u306b\u30e1\u30fc\u30eb\u3067\u9001\u3089\u308c\u3066\u3057\u307e\u3044\u307e\u305d\u3046\u3067\u3059\u3002<\/p>\n<p>\u306a\u305c\u306a\u3089\u3070\u3001\u3053\u306e\u60aa\u610f\u306e\u3042\u308b\u30b5\u30a4\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u524d\u306b\u3001A\u3055\u3093\u306f\u3001\u697d\u3057\u3044\u304a\u8cb7\u3044\u7269.com\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u3001\u305d\u306e\u30b5\u30a4\u30c8\u306e\u30bb\u30c3\u30b7\u30e7\u30f3ID\u304cCookie\u306b\u683c\u7d0d\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u72b6\u614b\u3067\u3001\u60aa\u610f\u306e\u3042\u308b\u4eba\u304c\u7528\u610f\u3057\u305f\u30da\u30fc\u30b8\u306b\u884c\u304f\u3068\u3001\u697d\u3057\u3044\u304a\u8cb7\u3044\u7269\u30b5\u30a4\u30c8.com\u306b\u3001A\u3055\u3093\u306e\u30bb\u30c3\u30b7\u30e7\u30f3ID\u304cCookie\u306b\u4e57\u305b\u3089\u308c\u3066\u3001\u9001\u3089\u308c\u3066\u3057\u307e\u3044\u3001\u6b63\u898f\u306a\u30e6\u30fc\u30b6\u30fc\u3068\u3057\u3066\u5224\u65ad\u3055\u308c\u3066\u3001A\u3055\u3093\u306e\u30b7\u30e7\u30c3\u30d4\u30f3\u30b0\u30ab\u30fc\u30c8\u306e\u4e2d\u8eab\u304c\u30ec\u30b9\u30dd\u30f3\u30b9\u3068\u3057\u3066\u8fd4\u3063\u3066\u304d\u3066\u3001sendMail2Attaker\u95a2\u6570(\u95a2\u6570\u306e\u4e2d\u8eab\u306f\u3069\u3053\u304b\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u304a\u308a\u3001\u5f15\u6570\u3067\u6307\u5b9a\u3057\u305f\u5185\u5bb9\u3092\u60aa\u610f\u306e\u3042\u308b\u4eba\u306b\u30e1\u30fc\u30eb\u3067\u9001\u4fe1\u3059\u308b\u3082\u306e\u3067\u3059)\u3067\u60aa\u610f\u306e\u3042\u308b\u4eba\u306b\u30e1\u30fc\u30eb\u3067\u9001\u3089\u308c\u3066\u3057\u307e\u3044\u305d\u3046\u3067\u3059\u3002<\/p>\n<p>\u5148\u307b\u3069\u304b\u3089\u300c\u305d\u3046\u3067\u3059\u300d\u3068\u8a00\u3063\u3066\u3044\u307e\u3059\u304c\u3001\u305d\u306e\u901a\u308a\u3067\u3001\u5b9f\u969b\u306b\u306f\u3001A\u3055\u3093\u306e\u30b7\u30e7\u30c3\u30d4\u30f3\u30b0\u30ab\u30fc\u30c8\u306e\u4e2d\u8eab\u306f\u3001\u60aa\u610f\u306e\u3042\u308b\u4eba\u306b\u30e1\u30fc\u30eb\u3067\u9001\u4fe1\u3055\u308c\u307e\u305b\u3093\u3002\u5148\u307b\u3069\u8aac\u660e\u3057\u305fSame Origin Policy\u304c\u50cd\u304f\u304b\u3089\u3067\u3059\u3002<\/p>\n<p>\u3057\u304b\u3057\u306a\u304c\u3089\u3001\u3084\u306f\u308a\u3001\u3053\u306eSame Origin Policy\u3092\u8d85\u3048\u3066\u30a2\u30af\u30bb\u30b9\u3057\u305f\u3044\u3068\u3044\u3046\u8981\u671b\u306f\u3042\u308b\u3068\u601d\u3044\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u304a\u5929\u6c17\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308bAPI\u3068\u304b\u3067\u3057\u3087\u3046\u304b\u3002\u304a\u5929\u6c17.com\u3068\u3044\u3046\u30b5\u30a4\u30c8\u306eAPI\u3092XMLHttpRequest\u3067\u53d6\u5f97\u3057\u3066\u3001\u81ea\u793eWeb\u30b5\u30a4\u30c8\u306b\u53cd\u6620\u3055\u305b\u305f\u3044\u5834\u5408\u306a\u3069\u3067\u3059\u3002\u81ea\u793eWeb\u30b5\u30a4\u30c8\u306eURL\u3068\u3001\u304a\u5929\u6c17.com\u306eAPI\u306eURL\u50cd\u304f\u304b\u3089\u3067\u7570\u306a\u308b\u306e\u3067\u3001Same Origin Policy\u304c\u50cd\u304d\u3001\u30a2\u30af\u30bb\u30b9\u304c\u51fa\u6765\u307e\u305b\u3093\u3002<\/p>\n<p>\u305d\u3053\u3067\u3001CORS\u306e\u767b\u5834\u306a\u308f\u3051\u3067\u3059\u3002<\/p>\n<h2>CORS\u306e\u3057\u304f\u307f<\/h2>\n<p>\u4e0a\u8a18\u306e\u3088\u3046\u306a\u3053\u3068\u3092\u5b9f\u73fe\u3055\u305b\u308b\u305f\u3081\u306b\u3001CORS\u3068\u3044\u3046\u4ed5\u69d8\u304c\u5236\u5b9a\u3055\u308c\u307e\u3057\u305f\u3002<\/p>\n<p>\u3056\u3063\u304f\u308a\u8a00\u3044\u307e\u3059\u3068\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u624b\u9806\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>(1) Web\u30b5\u30a4\u30c8\u306b\u7f6e\u3044\u3066\u3042\u308bJava Script\u306f\u3001Ajax\u306a\u3069\u3067API\u306b\u63a5\u7d9a\u3059\u308b\u969b\u3001\u305d\u306eAPI\u3092\u63d0\u4f9b\u3059\u308b\u30b5\u30fc\u30d0\u30fc(\u4ee5\u964d\u3001API\u30b5\u30fc\u30d0\u30fc)\u306b\u3001\u4ed6\u306eURL\u304b\u3089\u306e\u63a5\u7d9a\u304c\u30aa\u30c3\u30b1\u30fc\u304b\u3069\u3046\u304b\u3092\u805e\u304f(preflight request)<\/p>\n<p>(2) \u3082\u3057\u3001API\u306e\u63d0\u4f9b\u3059\u308b\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u30aa\u30c3\u30b1\u30fc\u3068\u3044\u3046\u8fd4\u4e8b\u304c\u8fd4\u3063\u3066\u304d\u305f\u3089\u3001Web\u30b5\u30a4\u30c8\u306fAPI\u3092\u30b3\u30fc\u30eb\u3059\u308b\u3002<\/p>\n<p>\u3064\u307e\u308a\u3001\u5b9f\u8cea2\u56de\u306eHTTP\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u6295\u3052\u3089\u308c\u307e\u3059\u3002<\/p>\n<p>\u4e0a\u8a18\u306e\u5185\u5bb9\u3092\u3082\u3063\u3068\u7d30\u304b\u304f\u8aac\u660e\u3057\u307e\u3059\u3068\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>(1) Web\u30b5\u30a4\u30c8\u306fAPI\u30b5\u30fc\u30d0\u30fc\u306b\u4ee5\u4e0b\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u6295\u3052\u307e\u3059\u3002\u3053\u308c\u3092preflight request\u3068\u8a00\u3044\u307e\u3059\u3002<\/p>\n<pre>\nOPTIONS \/api HTTP\/1.1\nAccess-Control-Request-Method: (\u3053\u306e\u5f8c\u306b\u884c\u3046\u30ea\u30af\u30a8\u30b9\u30c8\u306eHTTP\u30e1\u30bd\u30c3\u30c9(GET, POST\u306a\u3069))\n<\/pre>\n<p>(2) API\u30b5\u30fc\u30d0\u30fc\u306f\u4ee5\u4e0b\u306e\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u8fd4\u3057\u307e\u3059\u3002<\/p>\n<pre>\nHTTP\/1.1 200 OK\nAccess-Control-Allow-Origin: *\nAccess-Control-Allow-Methods: *\n<\/pre>\n<p>Access-Control-Allow-Origin\u306f\u3001\u3053\u306eAPI\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3057\u3066\u3044\u3044\u63a5\u7d9a\u5143\u306eWeb\u30b5\u30a4\u30c8\u306eURL\u3092\u8868\u3057\u307e\u3059\u3002*\u306e\u5834\u5408\u306f\u3001\u5168\u3066\u306e\u30b5\u30a4\u30c8\u306e\u304b\u3089\u306e\u63a5\u7d9a\u3092\u8a31\u53ef\u3057\u307e\u3059\u3002\u63a5\u7d9a\u5143\u3092\u5236\u9650\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8a18\u8f09\u3057\u307e\u3059\u3002<\/p>\n<pre>\nAccess-Control-Allow-Origin: https:\/\/www.sios.com\n<\/pre>\n<p>Access-Control-Allow-Methods\u306f\u63a5\u7d9a\u5143\u306eWeb\u30b5\u30a4\u30c8\u304b\u3089\u9001\u3089\u308c\u3066\u304f\u308b\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30e1\u30bd\u30c3\u30c9(POST\u3001GET\u7b49)\u306b\u306a\u308a\u307e\u3059\u3002*\u306e\u5834\u5408\u306f\u5168\u3066\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u8a31\u53ef\u3059\u308b\u3053\u3068\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>(3) Web\u30b5\u30a4\u30c8\u306eJava Script(\u6b63\u78ba\u306b\u8a00\u3044\u307e\u3059\u3068XMLHttpRequest)\u306f\u3001(2)\u306e\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u5143\u306b\u3001API\u30b5\u30fc\u30d0\u30fc\u306b\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u767a\u884c\u3059\u308b\u304b\u3092\u6c7a\u3081\u307e\u3059\u3002\u5148\u307b\u3069\u306e\u3088\u3046\u306bAccess-Control-Allow-Origin\u306b*\u304c\u3042\u308b\u304b\u3001Web\u30b5\u30a4\u30c8\u306eURL\u304c\u542b\u307e\u308c\u3066\u3044\u305f\u3089\u3001API\u30b5\u30fc\u30d0\u30fc\u3078\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u767a\u884c\u3057\u307e\u3059\u3002<\/p>\n<p>\u6614\u306f\u3001JSONP\u3068\u3044\u3046\u3057\u304f\u307f\u3067\u30af\u30ed\u30b9\u30b5\u30a4\u30c8\u306a\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u767a\u884c\u3092\u5b9f\u73fe\u3057\u3066\u3044\u307e\u3057\u305f\u3002\u3057\u304b\u3057\u3001JSONP\u3068\u3044\u3046\u306e\u306f\u3001\u3042\u308b\u610f\u5473\u3001Java Script\u306e\u4ed5\u69d8\u306e\u88cf\u3092\u304b\u3044\u305f\u3001\u88cf\u30ef\u30b6\u7684\u306a\u624b\u6cd5\u3067\u3042\u308a\u307e\u3059\u3002\u4eca\u5f8c\u306f\u3001\u4e0a\u8a18\u306e\u3088\u3046\u306a\u3001RFC\u3067\u5236\u5b9a\u3055\u308c\u305f\u624b\u6cd5\u304c\u4e3b\u6d41\u306b\u306a\u3063\u3066\u304d\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u3088\u3046\u306a\u4ed5\u7d44\u307f\u3067\u30af\u30ed\u30b9\u30b5\u30a4\u30c8\u306a\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u767a\u884c\u3092\u5236\u9650\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<h2>CORS\u3092\u5b9f\u73fe\u3059\u308b\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9<\/h2>\n<p>CORS\u3092\u5b9f\u73fe\u3059\u308b\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u5b9f\u969b\u306b\u66f8\u3044\u3066\u307f\u307e\u3059\u3002\u4f8b\u306f\u3001Java\u306eSpring\u3068\u3044\u3046\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u304c\u3001\u4ed6\u306e\u8a00\u8a9e\u3067\u3082\u4f3c\u305f\u3088\u3046\u306a\u4ed5\u7d44\u307f\u306b\u306a\u308b\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u304c\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3067\u3059\u3002preflight request\u306f\u30ea\u30af\u30a8\u30b9\u30c8\u3054\u3068\u306b\u6bce\u56de\u51e6\u7406\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u305f\u3081\u3001Servlet Filter\u3067\u5b9f\u73fe\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n\/\/ pakage\u3084import\u306f\u7701\u7565\u3057\u3066\u3044\u307e\u3059\r\n@Component\r\n@Order(1) \/\/ (1)\r\npublic class CORSFilter implements Filter {\r\n\r\n\t@Autowired\r\n\tHttpSession session;\r\n\r\n\t@Override\r\n\tpublic void destroy() {\r\n\t\t\/\/ TODO Auto-generated method stub\r\n\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)\r\n\t\t\tthrows IOException, ServletException {\r\n\r\n\t\tHttpServletRequest httpsServletRequest = (HttpServletRequest) request;\r\n\t\tHttpServletResponse httpsServletResponse = (HttpServletResponse) response;\r\n\r\n\t\thttpsServletResponse.setHeader(\"Access-Control-Allow-Origin\", \"*\"); \/\/ (2)\r\n\t\thttpsServletResponse.setHeader(\"Access-Control-Allow-Methods\", \"*\"); \/\/ (3)\r\n\r\n\t\tif (httpsServletRequest.getMethod().equals(\"OPTIONS\")) { \/\/ (4)\r\n\r\n\t\t\thttpsServletResponse.setStatus(HttpServletResponse.SC_OK);\r\n\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tchain.doFilter(request, response); \/\/ (5)\r\n\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void init(FilterConfig arg0) throws ServletException {\r\n\t\t\/\/ TODO Auto-generated method stub\r\n\r\n\t}\r\n\r\n}\r\n<\/pre>\n<p>(1)\u306f\u30d5\u30a3\u30eb\u30bf\u306e\u9069\u7528\u9806\u5e8f\u3092\u8868\u3057\u3066\u3044\u307e\u3059\u3002preflight request\u306f\u5fc5\u305a\u4e00\u756a\u6700\u521d\u306b\u51e6\u7406\u3055\u308c\u306a\u3044\u3068\u3044\u3051\u306a\u3044\u305f\u3081\u3001\u4ed6\u306e\u30d5\u30a3\u30eb\u30bf\u3088\u308a\u3082\u4e00\u756a\u6700\u521d\u306b\u51e6\u7406\u3055\u308c\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>(2)(3)\u306f\u3001Access-Control-Allow-Origin\u30d8\u30c3\u30c0\u3068Access-Control-Allow-Methods\u3092\u8fd4\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>(4)\u306f\u3001\u30e1\u30bd\u30c3\u30c9\u304cOPTIONS\u3001\u3064\u307e\u308a\u3053\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304cpreflight request\u306e\u3068\u304d\u3060\u3051\u3001HTTP\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9200\u3092\u8fd4\u3057\u3001return\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u3046\u3059\u308b\u3068\u6b21\u306e\u30d5\u30a3\u30eb\u30bf\u306f\u51e6\u7406\u3055\u308c\u305a\u3001\u3053\u306e\u30ec\u30b9\u30dd\u30f3\u30b9\u306f\u7d42\u4e86\u3068\u306a\u308a\u3001\u3053\u308c\u4ee5\u4e0a\u306f\u51e6\u7406\u3055\u308c\u307e\u3059\u3002\u9006\u306b\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u304cpreflight request\u51fa\u306a\u304b\u3063\u305f\u5834\u5408\u306f\u3001(5)\u306b\u884c\u304d\u3001\u5f8c\u7d9a\u306e\u30d5\u30a3\u30eb\u30bf\u304c\u51e6\u7406\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u4e0a\u304c\u3001CORS\u306e\u8aac\u660e\u53ca\u3073\u5b9f\u6226\u6295\u5165\u65b9\u6cd5\u3067\u3057\u305f\u3002\u4f55\u304b\u306e\u304a\u5f79\u306b\u7acb\u3066\u305f\u3089\u5e78\u3044\u3067\u3059\u3002<\/p>\n<!-- Anyway Feedback Container \/\/-->\n<div class=\"afb_container\" id=\"afb-container-post-7620\">\u3054\u89a7\u3044\u305f\u3060\u304d\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\uff01\r\n\r\n<span class=\"message\">\u3053\u306e\u6295\u7a3f\u306f\u304a\u5f79\u306b\u7acb\u3061\u307e\u3057\u305f\u304b\uff1f<\/span>\r\n<br \/>\r\n<br \/>\r\n<a class=\"good\" href=\"#afb-post-7620\">\u5f79\u306b\u7acb\u3063\u305f<\/a>\r\n<a class=\"bad\" href=\"#afb-post-7620\">\u5f79\u306b\u7acb\u305f\u306a\u304b\u3063\u305f<\/a>\r\n<br \/>\r\n<br \/>\r\n<span>1\u4eba\u304c\u3053\u306e\u6295\u7a3f\u306f\u5f79\u306b\u7acb\u3063\u305f\u3068\u8a00\u3063\u3066\u3044\u307e\u3059\u3002<\/span><input type=\"hidden\" name=\"post_type\" value=\"post\" \/>\n<input type=\"hidden\" name=\"object_id\" value=\"7620\" \/>\n<\/div>\n<!-- \/\/Anyway Feedback Container -->","protected":false},"excerpt":{"rendered":"<p>\u3053\u3093\u306b\u3061\u306f\u3002\u30b5\u30a4\u30aa\u30b9\u30c6\u30af\u30ce\u30ed\u30b8\u30fc\u6b66\u4e95\u3067\u3059\u3002 \u4eca\u56de\u306f\u3001Spring Boot\u306b\u3066\u3001Cross Origin Resource Sharing(\u4ee5\u964d\u3001CORS)\u3092\u884c\u3046\u65b9\u6cd5\u3092\u66f8\u3044\u3066\u307f\u307e\u3059\u3002 \u307e\u305a\u3001\u305d\u306e\u524d\u306b\u3001CORS\u3068\u306f\u3069\u3046\u3044\u3046 &#8230; <\/p>\n","protected":false},"author":6,"featured_media":6874,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[298,459],"tags":[162,194,195],"class_list":{"0":"post-7620","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-oss","8":"category-takei","9":"tag-java","10":"tag-spring","11":"tag-security","12":"entry"},"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/tech-lab.sios.jp\/wp-content\/uploads\/2017\/08\/AL002-kaigishitukarachirari20140722_TP_V.jpg?fit=1599%2C1066&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tech-lab.sios.jp\/wp-json\/wp\/v2\/posts\/7620","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tech-lab.sios.jp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tech-lab.sios.jp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tech-lab.sios.jp\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/tech-lab.sios.jp\/wp-json\/wp\/v2\/comments?post=7620"}],"version-history":[{"count":7,"href":"https:\/\/tech-lab.sios.jp\/wp-json\/wp\/v2\/posts\/7620\/revisions"}],"predecessor-version":[{"id":12497,"href":"https:\/\/tech-lab.sios.jp\/wp-json\/wp\/v2\/posts\/7620\/revisions\/12497"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tech-lab.sios.jp\/wp-json\/wp\/v2\/media\/6874"}],"wp:attachment":[{"href":"https:\/\/tech-lab.sios.jp\/wp-json\/wp\/v2\/media?parent=7620"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tech-lab.sios.jp\/wp-json\/wp\/v2\/categories?post=7620"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tech-lab.sios.jp\/wp-json\/wp\/v2\/tags?post=7620"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}