40

私はコントローラーメソッドで@PreAuthorizeを使用してSpringSecurityを使用しています。私の理由は、承認チェックを1つのレイヤーで予測どおりに、リクエストのできるだけ早い段階で実行することを望んでいたことです。ただし、Spring Security 3のドキュメントを読んだところ、サービスレイヤーにメソッドレベルのセキュリティを適用することが推奨されていることがわかりました(ただし、理由はわかりません)。

私の質問は、スプリングセキュリティメソッドレベルのアノテーションをコントローラーレイヤーまたはサービスレイヤーに適用する必要があるかどうかです。(または「両方」、または「依存する」?)さらに重要なのは:なぜですか?

4

3 に答える 3

23

"場合によります" :)。アプリケーションにすべてのビジネスロジックが適用されるサービスレイヤーがある場合、それは通常、セキュリティ制約を適用するためのクリーンな場所であり、コーナーケースを見逃していないことを確認してください。

Webコードは一般的に厄介で、さらに多くのコードがあり、より急速に変化し、複数の場所から同じサービスメソッドを呼び出すことになる可能性があります。誰かが新しいコントローラを追加して、それを適切に保護するのを忘れる可能性があります。または、同じサービスを呼び出すさまざまなタイプのクライアントがある場合もあります。

ただし、アプリケーションの構造とユースケースによって異なります。コントローラーを保護したい理由については、良い議論があるかもしれません。

于 2013-01-31T14:23:00.990 に答える
11

コードの再利用の観点から考えてください。他の場所でサービスを利用しますか?Web層にフィードするだけではありませんか?また、jmsブリッジでサービスを再利用するため、サービスレイヤーを保護します。

于 2013-07-25T09:42:25.237 に答える
4

サービスはそれを使用するためのより良い場所だと思います。

コントローラで発生する可能性のあるいくつかの問題と、この種の注釈をサービスに配置するためのSpring Security FAQの推奨事項にもかかわらず、一部のアクションの承認は、Web層の責任というよりもビジネスルールであると理解しています@PreAuthorize

于 2018-02-06T10:42:54.483 に答える