2017-08-31 19 views
3

@CrossOrigin Annotationの起点を環境変数で指定することはできますか?私はuat/staging/productionに同じコードベースを使用できるようにこれを実行したいと思います。私はテストのためにlocalhost経由で私のuat/staging環境にアクセスできるようにしたいが、私の実動環境では特定のエンドポイントからの要求しか受け付けないようにする。@CrossOrigin orginsを環境変数で指定する

たとえば、これは新しいAPIのクロス・ソース注釈ユーザーです。

@CrossOrigin(origins = {"http://localhost:9000", "http://example.com"}) 

これは問題なく動作します。私のローカルマシンでテストすると、ポート9000上で動作するWebサーバーだけが自分のAPIにアクセスできます。私はその後、私は、あまりにも

@CrossOrigin(origins = "#{'${allowed.origins}'.split(',')}") 

そして今、要求がCORSのためにブロックされている注釈を変更し、私のローカルのWindowsマシン

ALLOWED_ORIGINS = http://localhost:9000,http://example.com 

に私の環境変数を設定してみました。

フォローアップの質問として、ワイルドカードとしてポートを設定できますか?どのようなlocalhostウェブサーバーでもAPIにアクセスできるようにするには?

UPDATE

だから私は経由して私の質問の最初の部分を達成することができました - https://spring.io/blog/2015/06/08/cors-support-in-spring-framework#filter-based-cors-support

、私の人生のためしかしallowedOrigins()

@Value("#{'${allowed.origins}'.split(',')}") 
private List<String> allowedOrigins; 

用のenv変数を設定します私はワイルドカード/パターンマッチングのどのような形式も働かないようです。私は以下の両方を環境変数として試しました。

http://localhost:* 
http:\/\/localhost:[0-9]+ 

私はこれを別個の質問として提起しなければならないかもしれません。

答えて

1

実際には、注釈はコンパイル時にのみ処理されます。 動的データを処理またはプロビジョニングすることはできません。 構成データは固定または一定でなければなりません。

xmlを使用して春を設定している場合。次のコードを使用してspringを設定できます。

<mvc:cors> 

    <mvc:mapping path="/api/**" 
     allowed-origins="http://domain1.com, http://domain2.com" 
     allowed-methods="GET, PUT" 
     allowed-headers="header1, header2, header3" 
     exposed-headers="header1, header2" allow-credentials="false" 
     max-age="123" /> 

    <mvc:mapping path="/resources/**" 
     allowed-origins="http://domain1.com" /> 

</mvc:cors> 

ソースlink

それはあなたが単にフィルタチェインであなたのCORSフィルターを交換、その後、CORSの処理のために、独自のフィルタを提供する必要がありますが、それ以上の設定が必要です。

+0

xmlベースの設定は使用しません。また、すべてのlocalhostポートを許可するパターンマッチングが必要なので、正しく理解している場合はCORSフィルタを使用する必要があります。 – Jags

+0

Javaベースの設定を使用していますか? – Paras

+0

はい私はあります。 - https://spring.io/blog/2015/06/08/cors-support-in-spring-framework#filter-based-cors-supportどのように私はそれを働かせています。 – Jags