はじめに:
リソース要求は、それ自身の最初のリソースは異なるドメインが提供されると、リソースが開始され、クロスドメインの HTTPリクエスト(クロスサイトHTTPリクエストを)。
例えば、ドメインA( HTTP://domaina.example )ドメインB <img>タグ(によって導入されたWebアプリケーションの http://domainb.foo )ピクチャリソース部位(:// DomainBのHTTP。 FOO / image.jpg)、ドメイン名 のWebアプリケーションは、ブラウザがクロスサイトHTTPリクエストを起動するようになります。
(CSS、画像、JavaScriptのスクリプト、および他のタイプのリソースを含む)さまざまなリソースをロードするためにクロスサイトHTTPリクエストを使用して、今日のWeb開発では、それが一般的で一般的な方法となっています。
ご存知のように、セキュリティ上の理由から、ブラウザがスクリプトによって開始され、クロスサイトリクエストを制限します。例えば、使用 のXMLHttpRequest を遵守しなければならないHTTPリクエスト元オブジェクト同一生成元ポリシーを。具体的には、Webアプリケーション、およびのみ使用することができる のXMLHttpRequestオブジェクトをHTTP要求を開始するために、その元のドメインにロードされているが、他のドメインへのリクエストを開始することはできません。セキュリティを損なうことなく、熱心に強く、より豊かな、より安全なWebアプリケーション、開発者を開発することができるようにするために、Webアプリケーションの技術は、より強力かつ豊富なことができます。たとえば、あなたが使用できる のXMLHttpRequestを
クロスサイトHTTP要求を開始します。(この説明ドメイン間不正確な、クロスドメインには、クロスサイトリクエストを開始するために、ブラウザを制限するものではありませんが、クロスサイトリクエストは通常開始することができるが、結果はブロックされ、ブラウザによって返されました。最良の例では、要求は、バックエンドサーバーに送信され、クロスサイト攻撃のCSRF原理かどうかであるクロスドメイン!注意:一部のブラウザでは、のドメインからのHTTPS許可していないクロスドメインなどChromeとFirefoxなどのHTTPへのアクセス、ブラウザが要求時に発行されていないが、特殊なケースでリクエストを、傍受されます。)
からの引用:
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
方法:新しいクラスや構成ガイドは法とCorsConfigurationのCorsFilterアプリケーションを追加しました
輸入org.springframework.context.annotation.Bean。 輸入org.springframework.context.annotation.Configuration。 輸入org.springframework.web.cors.CorsConfiguration。 輸入org.springframework.web.cors.UrlBasedCorsConfigurationSource。 輸入org.springframework.web.filter.CorsFilter。 @Configuration パブリッククラスCorsConfig { プライベートCorsConfiguration buildConfig(){ CorsConfiguration corsConfiguration =新しいCorsConfiguration()。 corsConfiguration.addAllowedOrigin( "*"); // 1允许任何域名使用 corsConfiguration.addAllowedHeader( "*"); // 2允许任何头 corsConfiguration.addAllowedMethod( "*"); } 公共CorsFilter corsFilter(){ =新しいUrlBasedCorsConfigurationSource UrlBasedCorsConfigurationSource源()。 source.registerCorsConfiguration( "/ **"、buildConfig()); // 4 リターン新しいCorsFilter(ソース)。 } }
方法2:フィルタモードを使用します
インポートのjavax.servlet。*; インポートのjavax.servlet.http.HttpServletResponse; インポートにjava.io.IOException; @Component パブリッククラスCorsFilterは、フィルタ{実装 最終静的org.slf4j.Loggerロガー= org.slf4j.LoggerFactory.getLogger(CorsFilter.class)を、 公共ボイドのdoFilter(のServletRequest REQ、たServletResponse RES、れるFilterChain鎖)にIOException、ServletExceptionが{スロー HttpServletResponseの応答=(HttpServletResponseの)RESと、 response.setHeader(「アクセス制御-許可-起源」、「*」); response.setHeader( "アクセス制御-許可-メソッド"、 "POSTは、DELETE、OPTIONS、GET"); response.setHeader(「アクセス・コントロール・マックス・エイジ」、「3600」)。 response.setHeader( "X-要求-で"、 "アクセス制御-ヘッダを許可")。 System.out.println( "*********************************过滤器被使用****** ******************** "); chain.doFilter(REQ、RES)。 } 公共ボイドのinit(に、FilterConfigに、FilterConfig){} 公共ボイド破壊(){} }