フロントエンドとバックエンドの分離の普及に伴い、フロントエンドとバックエンド間のクロスドメインの問題が、Web 開発者が徐々に直面する問題になってきました。クロスドメインの問題には、ブラウザーの同一オリジン ポリシーが関係します。つまり、デフォルトでは、ブラウザーはページが同じオリジンのサーバーに対してのみリクエストを開始することを許可し、他のドメイン名のサーバーに対してはリクエストを開始することを許可しません。この記事では、Spring Boot フレームワークを使用してクロスドメインの問題を実装および解決する方法を紹介します。
クロスドメインの問題とは、ブラウザーで、ドメイン名 A で実行されている Web アプリケーションがドメイン名 B の Web アプリケーションにリクエストを送信すると、ブラウザーがそのリクエストをブロックすることを意味します。ブラウザの同一オリジンポリシーに準拠します。同一オリジン ポリシーは、ページが同じプロトコル、ドメイン名、およびポート番号を持っている場合にのみ、ブラウザがサーバーへのリクエストの開始を許可することを意味します。
Spring Boot は、クロスドメインの問題を解決するためのさまざまなメソッドを提供します。一般的なメソッドをいくつか紹介します。 。
2.1 アノテーション @CrossOrigin を使用する
Spring Boot では、アノテーション @CrossOrigin を使用してクロスドメイン リクエストを実装できます。 @CrossOrigin アノテーションはクラス レベルまたはメソッド レベルで使用でき、クロスドメイン アクセスが許可されるドメイン名、許可されるリクエスト メソッドなど、CORS のいくつかのオプションを指定できます。以下は、@CrossOrigin アノテーションを使用したサンプル コードです。
@RestController @RequestMapping("/api") @CrossOrigin(origins = "http://localhost:8080", maxAge = 3600) public class ApiController { @GetMapping("/hello") public String hello() { return "Hello World!"; } }
上記のコードでは、@CrossOrigin アノテーションが使用され、クロスドメイン ドメイン名が http://localhost:8080 として指定されています。最大キャッシュ時間は 1 時間に設定されます。このようにして、フロントエンド Ajax リクエストを行うときに、ドメインを越えて http://localhost:8080 にアクセスできます。 @CrossOrigin アノテーションは、@RequestBody パラメーターではなく、コントローラーのクラスまたはメソッドに追加する必要があることに注意してください。
2.2 WebMvcConfigurer の構成
クロスドメインの問題を解決するもう 1 つの方法は、WebMvcConfigurer インターフェイスを実装し、addCorsMappings メソッドをオーバーライドし、CorsRegistry を使用してクロスドメイン アクセスを許可するドメイン名を構成することです。以下はサンプル コードです:
@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/api/**") .allowedOrigins("http://localhost:8080") .allowedMethods("GET", "POST") .maxAge(3600); } }
上記のコードでは、CorsConfig クラスは WebMvcConfigurer インターフェイスを実装し、addCorsMappings メソッドをカバーし、http://localhost:8080 ドメイン名での GET および POST リクエストのアクセスのみを許可します。 。 「/api」を含むパスには CORS 制限が適用されますが、他のパスには制限がありません。
2.3 フィルタの構成
フィルタの使用は、クロスドメインの問題を解決する方法でもあります。以下はフィルターの使用例です。
@Component public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException { HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "http://localhost:8080"); response.setHeader("Access-Control-Allow-Methods", "GET, POST"); response.setHeader("Access-Control-Max-Age", "3600"); chain.doFilter(req, res); } }
上記のコードでは、CorsFilter クラスは Filter インターフェイスを実装し、Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control- を追加します。 Max-Age などのリクエスト ヘッダー情報により、http://localhost:8080 ドメイン名での GET リクエストおよび POST リクエストへのアクセスが許可されます。
この記事では、Spring Boot フレームワークを使用してクロスドメインの問題を実装および解決する 3 つの一般的な方法を紹介します。 CORS の制限と制御は、アノテーション @CrossOrigin を使用し、WebMvcConfigurer を構成し、フィルターを使用することで実現できます。実際の開発では、独自のニーズに応じて、クロスドメインの問題を解決するための最適な方法を選択する必要があります。
以上がSpring Boot の実装とクロスドメインの問題の解決に関するヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。