9

渡された許可と入力パラメーターの組み合わせに基づいてユーザーを承認する必要があるシナリオがあります。

これが現在のシナリオです

public void bookTicket(String bookingType)
    {
    if (bookingType == "AIR"){
         bookAirTicket();
    }else{
         bookBusTicket();
    }
    }


@PreAuthorize("hasRole('BOOK_AIR')")
private void bookAirTicket(){
}

@PreAuthorize("hasRole('BOOK_BUS')")
private void bookBusTicket(){
}

次のようなものがありますか

@PreAuthorize(("hasRole('BOOK_AIR')" AND bookinType='AIR') OR ("hasRole('BOOK_BUS')"  AND bookinType='BUS'))
public void bookTicket(String bookingType)
    {
    if (bookingType == "AIR"){
         bookAirTicket();
    }else{
         bookBusTicket();
    }
    }

基本的に、入力パラメーターに基づく承認が必要です

ありがとう

4

1 に答える 1

15

はい、できます。パラメーターには、Spring EL 変数としてアクセスできます。実際、リファレンス マニュアルには、メソッド パラメータを使用するいくつかの例が示されています。クラスは、デバッグ シンボルが存在する状態でコンパイルする必要があります (通常はそうです)。

注釈値は単一の式文字列であることに注意してください。

"(hasRole('BOOK_AIR') and #bookinType == 'AIR') or (hasRole('BOOK_BUS') and #bookinType='BUS')"

実際には、複雑な式を使用するとエラーが発生しやすくなります。次のような単純な式を使用することもできます。

"@accessChecker.check('book', #bookinType)"

accessChecker提供された操作情報が許可されているかどうかに応じて true または false を返す「check」メソッドを持つアプリケーション コンテキスト内の Bean はどこにありますか (セキュリティ コンテキストに自分でアクセスすることで、現在のユーザーのロールを確認できます。他の場所で説明されていることがわかります)。 SOで)。

AccessDecisionManager独自の機能を記述したり、そこに機能をプラグインすることも検討できますAccessDecisionVoterが、それにはより多くの内部知識が必要です。

于 2012-07-28T12:36:41.793 に答える