1. クロスドメインの問題が発生する理由
これは、ブラウザーの同一生成元ポリシーの制限が原因です。同一生成元ポリシー (同一生成元ポリシー) は規約です。これはブラウザの中核で最も基本的なセキュリティ機能です。同一生成元ポリシーが存在しない場合、ブラウザの通常の機能に影響が出る可能性があります。 Web は同一生成元ポリシーに基づいて構築されており、ブラウザは同一生成元ポリシーを実装する手段にすぎません。
JavaScript では、同一生成元ポリシーにより、異なるドメイン間のやり取りが制限され、クロスドメイン攻撃が防止されます。いわゆる同じオリジン (つまり、同じドメイン内) とは、2 つのページが同じプロトコル、ホスト、ポート
2 を持っていることを意味します。リクエスト URL のプロトコル、ドメイン名、ポートが現在のページ URL と異なり、クロスドメインです。
- #非同種 Web ページの Cookie、LocalStorage、および IndexedDB を読み取ることができません
- 非同種 Web ページの DOM にアクセスできません
- AJAX リクエストを元のアドレス以外に送信できない
- 4. Java バックエンドが CORS クロスドメイン リクエストを実装する方法
CORS の場合クロスドメイン リクエスト。主に次の方法から選択できます:
- 新しい CorsFilter を返す
- WebMvcConfigurer を書き換える
-
- 応答ヘッダー (HttpServletResponse) を手動で設定します
- ##クロスドメインを実現するために Web フィルターをカスタマイズします
- 注:
- 最初の 2 つの方法はグローバル CORS 構成であり、後の 2 つの方法はローカル CORS 構成です。ローカル クロスドメインを使用すると、グローバル クロスドメイン ルールがオーバーライドされるため、@CrossOrigin アノテーションを使用して、より詳細なクロスドメイン リソース制御を行うことができます。
- 実際、どのソリューションであっても、最終的な目標は、応答ヘッダーを変更し、ブラウザーが必要とするデータを応答ヘッダーに追加して、クロスドメイン ## を達成することです。
-
#1. 新しい CorsFilter (グローバル クロスドメイン) を返す
任意の構成クラスで、新しい CorsFIlter Bean を返し、マッピング パスと特定の CORS 構成パスを追加します。
@Configuration public class GlobalCorsConfig { @Bean public CorsFilter corsFilter() { //1. 添加 CORS配置信息 CorsConfiguration config = new CorsConfiguration(); //放行哪些原始域 config.addAllowedOrigin("*"); //是否发送 Cookie config.setAllowCredentials(true); //放行哪些请求方式 config.addAllowedMethod("*"); //放行哪些原始请求头部信息 config.addAllowedHeader("*"); //暴露哪些头部信息 config.addExposedHeader("*"); //2. 添加映射路径 UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource(); corsConfigurationSource.registerCorsConfiguration("/**",config); //3. 返回新的CorsFilter return new CorsFilter(corsConfigurationSource); } }
2. WebMvcConfigurer をオーバーライド (グローバル クロスドメイン)
@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") //是否发送Cookie .allowCredentials(true) //放行哪些原始域 .allowedOrigins("*") .allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"}) .allowedHeaders("*") .exposedHeaders("*"); } }
3. アノテーションを使用する (ローカル クロスドメイン)
Use annotations@ コントローラー (クラス) CrossOrigin :、このクラスのすべてのメソッドがクロスドメインを許可することを示します。
@RestController @CrossOrigin(origins = "*") public class HelloController { @RequestMapping("/hello") public String hello() { return "hello world"; } }
メソッドでアノテーション @CrossOrigin を使用します:
@RequestMapping("/hello") @CrossOrigin(origins = "*") //@CrossOrigin(value = "http://localhost:8081") //指定具体ip允许跨域 public String hello() { return "hello world"; }
4. 応答ヘッダーを手動で設定します (ローカル クロスドメイン)
HttpServletResponse オブジェクトを使用して応答を追加しますヘッダー (Access-Control-Allow-Origin) を使用して、元のドメインを承認します。ここでの Origin の値は、すべてのアクセス許可が許可されていることを示す「*」に設定することもできます。
@RequestMapping("/index") public String index(HttpServletResponse response) { response.addHeader("Access-Allow-Control-Origin","*"); return "index"; }
5. カスタム フィルターを使用してクロスドメインを実現する
まず、MyCorsFilter.javaという名前のフィルターを作成します
package com.mesnac.aop; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; @Component public class MyCorsFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type"); chain.doFilter(req, res); } public void init(FilterConfig filterConfig) {} public void destroy() {} }
このフィルターを web.xml デバイスで構成します効果的なものにするために
<!-- 跨域访问 START--> <filter> <filter-name>CorsFilter</filter-name> <filter-class>com.mesnac.aop.MyCorsFilter</filter-class> </filter> <filter-mapping> <filter-name>CorsFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 跨域访问 END -->
以上がSpring Boot がクロスドメイン実装を実装する方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
