方法(サービス)レベルのセキュリティ対コントローラ(Web要求/ antMatcher)セキュリティ

アルグラント:

春のセキュリティでは、私はで固定URLのを参照してください。

http
    .authorizeRequests()
        .antMatchers("/admin").hasRole("ADMIN");

私はまた、メソッド・レベルのセキュリティがあることを参照してください。

@PreAuthorize("hasRole('ADMIN')")

されantMatchersながらURLを保護するために使用される@PreAuthorizeインタフェースを保護するために使用?

場合はantMatcher、すでにインタフェースを呼び出すURLを確保し、その後、必要性は、別途インターフェイスメソッドを確保するために、なぜ?

あなたのようなコントローラーでのメソッドレベルのセキュリティを使用することができます。

@PreAuthorize("hasRole('ADMIN')")
@GetMapping("/dashboard/person")
public String findEvent(Model model, HttpServletRequest request) {
....
ドライブ:

Webセキュリティと法のセキュリティは、あなたのアプリケーションを保護するには、2つの異なる方法が、ある参照春のセキュリティリファレンス

なぜちょうどweb.xmlのセキュリティを使わないのでしょうか?

あなたは春に基づくエンタープライズアプリケーションを開発していると仮定しましょう。あなたは一般的に対処する必要がある4つのセキュリティ上の懸念があります:認証、Webリクエストのセキュリティ、サービス層セキュリティ(ビジネスロジックを実装するつまり、あなたの方法)、およびドメインオブジェクトインスタンスセキュリティ(すなわち、異なるドメインオブジェクトは、異なるアクセス権を持っています)。心の中でこれらの一般的な要件と:

[...]

  1. Web要求のセキュリティ:サーブレット仕様リクエストURIを確保するためのアプローチを提供します。しかしながら、これらのURIは、サーブレット仕様自身の限られたURIのパス形式で表現することができます。春のセキュリティは、はるかに包括的なアプローチを提供します。たとえば、あなたは、単に要求されたページ以外のURIの部分を考慮することができる(たとえばあなたがHTTP GETパラメータを考慮することができる)と、コンフィギュレーションデータの独自のランタイムソースを実装することができ、Antのパスや正規表現を使用することができます。これは、あなたのWeb要求のセキュリティを動的にあなたのWebアプリケーションの実際の実行中に変更することができることを意味します。

  2. サービス層と、ドメインオブジェクトのセキュリティ:サービス・レイヤーのセキュリティまたはドメインオブジェクトインスタンスセキュリティのためのサーブレット仕様でのサポートの欠如は、多層アプリケーションのための重大な制限を表します。典型的には、開発者は、いずれかのこれらの要件を無視する、または(ビュー内部、またはさらに悪い)そのMVCコントローラコード内のセキュリティロジックを実装します。このアプローチには重大な欠点があります。

    A。懸念の分離:認証が横断的関心事であり、そのようなとして実装する必要があります。認証コードを実装するMVCコントローラやビューは、デバッグがより難しく、コントローラおよび承認ロジックの両方のテストに、それはより困難になり、多くの場合、コードの重複につながります。

    B。リッチクライアントとWebサービスのサポート:追加のクライアントタイプが最終的にサポートされなければならない場合は、Web層の中に埋め込まれた認証コードが非再利用可能です。春のリモーティング輸出業者のみがサービス層豆(ないMVCコントローラ)をエクスポートすることを検討すべきです。こうした認可ロジックとしてクライアントタイプの多数をサポートするためのサービスレイヤに配置する必要があります。

    C。問題階層化:アンMVCコントローラやビューは、単にサービス層のメソッドまたはドメインオブジェクトインスタンスに関する許可の決定を実装するために間違ったアーキテクチャの層です。校長は、認可決定を行うためにそれを可能にするために、サービスレイヤに渡すことができるが、そうすることは、すべてのサービスレイヤ法上の追加の引数を導入します。これはおそらく、それは単に専用のセキュリティフレームワークを使用する(費用便益基づいて)より経済的になるポイントに開発時間を増加させるが、よりエレガントなアプローチは、校長を保持するためにThreadLocalを使用することです。

    D。認証コードの品質:多くの場合、彼らは「それが簡単に物事を正しく行うために、そして難しい間違ったことをやって作る」というWebフレームワークのと言われています。彼らは目的の広い範囲のために抽象的に設計されているため、セキュリティフレームワークは、同じです。ゼロから独自の認証コードを書くことは、フレームワークが提供しています「設計チェック」、および社内の認証コードは、一般的に広く普及、ピアレビューと新しいバージョンから出てくるの改善を欠いて提供されていません。

春のセキュリティは、メソッドのセキュリティを推奨し、参照春のセキュリティリファレンスを

10.1.4リクエストのマッチングとHttpFirewall

[...]

実際に私たちは、あなたがあなたのアプリケーションへのアクセスを制御するために、あなたのサービスレイヤでメソッドのセキュリティを使用することをお勧めします、およびWebアプリケーションレベルで定義されたセキュリティ上の制約の使用に完全に依存しません。URLが変更と、アプリケーションがサポートするかもしれないと考えられるすべてのURLを考慮することは困難であるとどのようにリクエストを操作することがあります。あなたは試してみて、理解するのは簡単ですいくつかの単純なアリのパスを使用して自分自身を制限する必要があります。常にあなたがキャッチオールワイルドカード(/または)定義された最後と拒否アクセス権を持ってここで、「拒否・バイ・デフォルト」のアプローチを使用するようにしてください。

あなたはいつも春のセキュリティのメソッドのセキュリティオプションを活用する必要がありますので、サービスレイヤで定義されたセキュリティは、はるかに堅牢かつ困難バイパスにあります。

春のセキュリティではなく、個々のWebコントローラ上よりも、参照サービス層でメソッドのセキュリティを適用することを推奨します。春のセキュリティリファレンス

私は自分のアプリケーションのコンテキストに春のセキュリティの要素を追加したが、私は私のSpring MVCのコントローラ豆(Strutsのアクションなど)にセキュリティアノテーションを追加した場合、彼らは効果を持っていないようです。

[...]

一般的に、我々は、サービス層ではなく、個々のウェブコントローラに適用する方法のセキュリティをお勧めします。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=119020&siteId=1