2017-10-22 5 views
2

Spring Bootアプリケーションを2.0.0マイルストーンリリースでアップグレードしている間に、2.0.0.M4 security.require-sslおよびその他のセキュリティ設定オプション去ってしまった。私はcurrent docsの中で非難または新しいアプローチの言及を見つけなかったので、私は掘り出して、the GitHub issue where the work originatedを見つけました。Spring Boot 2.0.0.M4を使用していくつかの環境でSSLを要求する方法+

は、2.0のセキュリティ設定を大幅に簡素化するために、GitHubの問題の目標に拍手を捧げます。

私のパターンをアップグレードするのはうれしいですが、私は特定の環境でSSLを要求する方法についてちょっと固執しています。私はWebSecurityConfigurerAdapterの設定でhttp.requiresChannel().anyRequest().requiresSecure()を使用して同様の結果を達成できますが、アプリケーションを実行するすべての環境(たとえば、証明書なしのプロダクション環境、localhostのローカル開発など)でこの設定を有効にしたくありません。私はWebSecurityConfigurerAdapter構成にいくつかの条件付きロジックを入れることができると知っていますが、私はSpring環境設定を "環境にとらわれない"ように保ち、プロファイルに固有のプロパティファイルに自分の環境固有の設定を保持します。

最近、Spring Bootのセキュリティ設定が単純に変更された後、一部の環境でSSLを要求する推奨アプローチはありますか?

答えて

2

設定に応じていくつかのオプションがあります。

:あなたはHTTPSを必要と唯一の時間は、プロキシ(すなわちX-Forwarded- *ヘッダ)で注入されたカスタムヘッダーと環境にある場合

RequestMatcher

を変更すると、あなたはこのような何かを行うことができます

http 
    .requiresChannel() 
     .requestMatchers(r -> r.getHeader("X-Forwarded-Proto") != null).requiresSecure() 
     .and() 
    // ... 

このアプローチの良い点は、HTTPSをオンまたはオフにするために何もする必要がないことです。欠点は、ヘッダーを比較するとパフォーマンスが非常に低下することです。このパフォーマンスヒットは無視できるはずですが、一部の人にとっては美的には満足できないかもしれません。

条件設定

これはJavaコードであるので、あなたは常にあなたがHTTPSを必要としないかかどうかを決定するブール値のフラグを持つことができます。たとえば、メンバ変数を作成し、このようなものでExternalized Configurationにそれを解決:

@Value("${security.require_ssl}") 
private boolean requireHttps; 

そこで、このようなものを使用します。このアプローチは、春ブーツ1.xのアプローチとうまく整列し、それ

if(this.requireHttps) { 
    http 
     .requiresChannel() 
      .anyRequest().requiresSecure(); 
} 

http 
    // ... 

をそれぞれの要求でif文が追加されることはありません。ただし、管理するプロパティが必要です。

プロファイル

Madhuraで述べたように、あなたも@Profileを使用することができます。私はこのアプローチが、環境間に多くの違いがあり、HTTPSが必要かどうかを判断するようなマイナーなものには理想的ではない場合に、より適していることがわかります。小さな変更を加えるときのこのアプローチの問題は、重複して実行されることです。

2

あなたはセキュリティ設定をカスタマイズするために独自のWebSecurityConfigurerAdapterを追加することについて絶対に正しいです。構成環境に依存しないようにするには、@Profileを追加して、アクティブなプロファイルに応じてオンとオフを切り替えることができます。環境に依存しないssl構成のみで、残りのセキュリティ構成がすべての環境で同じ場合は、を持つhttp.requiresChannel().anyRequest().requiresSecure()を構成し、最初になるように構成するWebSecurityConfigurerAdapterを追加できますキックインするもの

関連する問題