関連するが異なることを行う 2 つのメソッドを持つ @Controller があるとします。それらを同じ URL エンドポイントで公開したいが、セキュリティ コンテキストに応じて機能が異なります。これで、マップされた単一のリクエスト メソッドを作成し、クラス内のさまざまなユーティリティ関数にディスパッチできることがわかりましたが、Spring MVC が入ってくるものに基づいてディスパッチを処理するように配線できますか?
ストローマンの例として、ROLE_ADMIN と ROLE_USER の間でディスパッチするコードがありますが、私の実際の使用例はかなり複雑です。
@Controller
public class Controller {
@RequestMapping("/api/thing")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public String doAnAdministrativeThing() {
... (admin-priviledge stuff goes here)
}
@RequestMapping("/api/thing")
@PreAuthorize("hasRole('ROLE_USER')")
public String doADifferentThing() {
... (normal-priviledged stuff goes here)
}
}
ウサギの穴をプリエンプトするには:
いいえ、2 つの関数を別の URL に配置したり、別のパラメーターや「通常の」 @RequestMapping ビットを使用したりすることについて、選択肢がない可能性があります。
セキュリティ コンテキストの違いは複雑ですが、@PreAuthorize 式内で処理できます。
実際には、ディスパッチする異なるコンテキストが 2 つ以上あります