クロスドメインでの春ブーツ

新しいクロスドメインのリソースへのアクセス(クロスオリジンリソースの共有)でHTML 5の特徴は、私たちは、バックエンドシステムの開発にクロスドメインアクセスのリソースを許可するかどうかを決定することができます。いわゆるクロスドメインは、異なるドメイン名、または別のポートまたはそのような問題ドメイン交差するmrbrid.cc mrbird.cc:8080ウェブサイトのサイトからリソースにアクセスするときのように異なるプロトコルを指します。箱から出してクロスドメインのサポートを提供するために、最初から春の4.2バージョン。ここでは春ブーツ開発のクロスドメインの問題を解決する方法だし、インタフェースは、アノテーション駆動型のプログラミングに分かれています。

 

クロスドメインシミュレーション

クロスドメインの問題を解決するために、我々は最初のクロスドメインのシナリオをシミュレートする必要があります。新しい春のブートプロジェクト、バージョン2.1.0.RELEASE、および以下の依存を引用:

<依存性> 
  <のgroupId> org.springframework.boot </のgroupId>
  <たartifactId>ばねブートスタータウェブ</たartifactId>
</依存>
<依存性>
  <のgroupId> org.springframework.boot </のgroupId>
  <たartifactId >春・ブート・スタータthymeleaf </たartifactId>
</依存関係>

 

次のようにアイテムの構造は次のとおりです。

com.example.demo 下に新しいパスコントローラパッケージと作成TestController

@Controller 
パブリッククラスTestController {   @RequestMapping(「インデックス」)   パブリック文字列インデックス(){       戻り「インデックス」。   }   @RequestMapping( "ハロー")   @ResponseBody   パブリック文字列のHello(){       戻り"ハロー"。   } }











 

リソース/テンプレートの下に、新しいindex.htmlを:

<!DOCTYPE HTML> 
<HTML LANG = "EN">
<HEAD>
  <メタ文字コード= "UTF-8">
  <タイトル>跨域测试</ TITLE>
  <スクリプトSRC = "http://libs.baidu.com /jquery/1.11.3/jquery.min.js "> </ SCRIPT>
</ head>
<body>
<DIV ID ="こんにちは"> </ div>
</ body>
<script>
  $(関数(){
      $に.get( "http://test.mrbird.cc:8080/hello"機能(データ){
          $( "#ハロー")テキスト(データ);
      })
  })
</ SCRIPT>
</ HTML>

 

ローカルhostsファイル、編集http://test.mrbird.cc:127.0.0.1のアドレスにマッピングします

起動項目が訪問HTTPを:// localhostを:8080 / 、その間違った報告書を見つけるのブラウザコンソールを観察するために、正常ハロー表示されないページ、およびF12を見つけます:

これは、私たちのhttp:8080 /://ローカルホストのドメイン名の試みhttp://test.mrbird.cc:8080クロスドメインの問題は、我々はこの問題を解決する必要がこんにちはインタフェース、。

注釈主導

スプリング4.2提供@CrossOrigin 、注釈はメソッドまたはクラスにマークすることができる、注釈を以下の属性を含みます。

プロパティ 意味
サポートされているドメインのセットを指定した*すべてのドメインは、デフォルト値をサポートしていることを示します*これらの値は、HTTPリクエストヘッダに対応しますAccess-Control-Allow-Origin
起源 同値
allowedHeaders リクエストヘッダのヘッダを許可する、デフォルトのサポート
exposedHeaders レスポンスヘッダにヘッドへのアクセスを許可する、デフォルトは空です
方法 以下のような要求をサポートする方法であって、GETPOSTPUT等が挙げられ、コントローラのメソッドのデフォルトのラベルと一致しています。
allowCredentials 使用する際に特定のドメインを指定する必要があり、要求とともに送信されたクッキーを許可します
MAXAGE 要求の妥当性の事前結果、デフォルトで30分

我々は、変換する必要があるメソッドを:TestControllerhello

( "こんにちは")@RequestMapping 
@ResponseBody
@CrossOrigin(値= "*")
パブリック文字列のHello(){
  戻り"ハロー"。
}

許可すべてのフィールドがサポートされ、再び訪問し、プロジェクトを再起動してHTTPを:// localhostを:8080 /

プログラミングインタフェース

使用に加えて@CrossOrigin、注釈を、我々は統一プログラミングを設定するインターフェイスを使用することができます。

com.example.demo新しいパスケースconfigパッケージ、その後、作成WebConfigurer、実装WebMvcConfigurer、オーバーライドするaddCorsMappingsデフォルトの実装を:

@Configuration 
パブリッククラスWebConfigurerはWebMvcConfigurer {実装   @Override   ます。public void addCorsMappings(CorsRegistryレジストリ){       registry.addMapping( "/ **")               .allowedOrigins( "*")               ("GET").allowedMethodsを。   } }







 

上面配置表示允许所有请求支持跨域访问,并且不限定域,但是支持持GET方法。将hello方法上的@CrossOrigin注解注释掉,重启项目,再次访问http://localhost:8080/,结果也是OK的。

过滤器实现

查看官方文档,发现其还提供了基于过滤器的实现方式:

@Bean
public FilterRegistrationBean corsFilter() {
  UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
  CorsConfiguration config = new CorsConfiguration();
  config.setAllowCredentials(true);
  config.addAllowedOrigin("*");
  source.registerCorsConfiguration("/**", config);
  FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
  bean.setOrder(0);
  return bean;
}

 

Actuator跨域

如果项目里集成了Actuator相关功能,其暴露的接口也支持跨域,只需要在配置文件中添加如下配置即可:

ENDPOINTS CORS CONFIGURATION (CorsEndpointProperties)

 

management.endpoints.web.cors.allow-credentials= # Whether credentials are supported. When not set, credentials are not supported.
management.endpoints.web.cors.allowed-headers= # Comma-separated list of headers to allow in a request. '*' allows all headers.
management.endpoints.web.cors.allowed-methods= # Comma-separated list of methods to allow. '*' allows all methods. When not set, defaults to GET.
management.endpoints.web.cors.allowed-origins= # Comma-separated list of origins to allow. '*' allows all origins. When not set, CORS support is disabled.
management.endpoints.web.cors.exposed-headers= # Comma-separated list of headers to include in a response.
management.endpoints.web.cors.max-age=1800s # How long the response from a pre-flight request can be cached by clients. If a duration suffix is not specified, seconds will be used.

おすすめ

転載: www.cnblogs.com/7788IT/p/11626870.html