スプリングガイドにCORSを適用
CORSについてもっと知りたい方は、まず理論編を参考にしてください
[理論編]SOPとCORS
サーバにCORSを適用する
クライアントプロジェクト(この例ではtest、ポートはlocalhost:8000)、サーバプロジェクト(この例ではdemo、ポートはlocalhost:8001)の2つのプロジェクトを作成
顧客プロジェクト環境設定 build.gradle依存項目にtymeleafに関連する依存項目 を追加 application.サーバポートをproperties に割り当てる DemoControllerを作成し、コード を追加サーバプロジェクト(プレゼンテーション)環境設定 application.サーバポートをproperties に割り当てるリソース/テンプレートのcors.htmlファイル を追加
サーバの実行と実装の検証
両方のサーバが稼働した後にhttp://localhost:8001/api/viewに接続されている場合、CORS権限は付与されていません.
開発者モードを実行すると、コンソールで次のエラーとfailalertが発生します.
➡️ スプリングDOCSで@CrossOrigin宣言 spring 4.2版は をサポートコントローラまたはメソッドユニット
適用例
WebMvcConfiguratorを継承するWebConfigファイルを作成し、@Configurationで優先パラメータファイル に設定します.
addMappingプログラムが提供するCORSを許可するドメインを設定します.このコードは、allowedOrigins要求を許可するすべてのURLを許可するドメインを設定します.このコードは、フロントエンドドメインURL LalowedHeadersが要求するヘッダファイルAllowedMethodsが許可するHTTPメソッドAllowCredentials Cookie要求を許可するmaxAgepreflight要求に対する応答時間をブラウザにキャッシュする.
適用例
WebMvcConfigを継承するWebConfigプロファイルを作成し、サーバ上のすべてのAPI(フロントエンドにCORSを適用
フロント(localhost:8001)送信要求 サーバに移動する前に、プロキシサーバを介して
プロキシサーバに を設定.サーバ(localhost:8000)は応答を送信し、応答ヘッダは に違反しない.
reactionの場合
WebpackはProxy機能をサポートしています.
package.jsonで
実行中のプロキシサーバの使用
cors-anywhereエージェントサーバ.
Spring BootでのCORS
Spring-Boot-COSの設定
CORSはどうして私たちをこんなに疲れさせたのですか?
Proxyを使用してCORSに応答する問題を解決
[理論編]SOPとCORS
サーバにCORSを適用する
実験環境の設定
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
server.port=8000
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
public class DemoController {
@GetMapping
public String test() {
return "테스트입니다.";
}
}
server.port=8001
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script>
$(function(){
$.ajax("http://localhost:8000/test")
.done(function(msg){
alert(msg);
})
.fail(function(){
alert("fail");
})
})
</script>
</body>
</html>
サーバの実行と実装の検証
両方のサーバが稼働した後にhttp://localhost:8001/api/viewに接続されている場合、CORS権限は付与されていません.
開発者モードを実行すると、コンソールで次のエラーとfailalertが発生します.
CORSの適用
1.@CrossOriginを追加
➡️ スプリングDOCSで@CrossOrigin宣言
@CrossOrigin(origins = "*", allowedHeaders = "*")
説明orientsが許可するドメインを設定します.複数ある場合、orient={"http://localhost:8000""http://localhost:8001"}はallowedHeadersが許可するタイトルmaxAgepreflightの結果をキャッシュに保存する時間を表します.デフォルト値は1800秒(30分)です.適用例
@CrossOrigin(origins = "http://localhost:8001") // 🌟 추가
@RestController
@RequestMapping("/test")
public class DemoController {
@GetMapping
public String test() {
return "테스트입니다.";
}
}
コントローラに@CrossOriginを追加すると、正常に動作します.2.WebConfigでCORSを設定する
addMappingプログラムが提供するCORSを許可するドメインを設定します.このコードは、allowedOrigins要求を許可するすべてのURLを許可するドメインを設定します.このコードは、フロントエンドドメインURL LalowedHeadersが要求するヘッダファイルAllowedMethodsが許可するHTTPメソッドAllowCredentials Cookie要求を許可するmaxAgepreflight要求に対する応答時間をブラウザにキャッシュする.
適用例
WebMvcConfigを継承するWebConfigプロファイルを作成し、サーバ上のすべてのAPI(
.addMapping("/**")
)をlocalhost:8001ドメイン接続を許可するように設定します.( .allowedOrigins("http://localhost:8001")
)@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:8001");
}
}
フロントエンドにCORSを適用
Proxyの作成
プロキシサーバに
Access-Control-Allow-Origin : *
応答Access-Control-Allow-Origin : *
であり、CORSポリシーreactionの場合
WebpackはProxy機能をサポートしています.
package.jsonで
{
"proxy": "http://xxx"
}
追加するだけで簡単に問題を解決できます.実行中のプロキシサーバの使用
cors-anywhereエージェントサーバ.
https://cors-anywhere.herokuapp.com/https://soyeon207.com
rocors-anywhere URLの後ろに要求されたURLを追加すればいいのですが、Herokoのエージェントサーバが応答ヘッダを中間に設定しているにもかかわらず、速度が遅く、現在正常に動作していないというホットな問題があります.リファレンス
Spring BootでのCORS
Spring-Boot-COSの設定
CORSはどうして私たちをこんなに疲れさせたのですか?
Proxyを使用してCORSに応答する問題を解決
Reference
この問題について(スプリングガイドにCORSを適用), 我々は、より多くの情報をここで見つけました https://velog.io/@soyeon207/실습편-CORS-적용하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol