2011-07-05 12 views
2

@Checkアノテーションで保護されたコントローラ内にアクションがあります。@Checkは、他のアクションからアクションが呼び出されたときには機能しません。

@With(Secure.class) 
public class Application extends Controller { 

    @Check("admin") 
    public static void securedMethod() { 
     //secured code 
    } 

ブラウザからこのアクションを呼び出すと、Securityクラスのboolean check(Stringプロファイル)が呼び出されます。しかし、私がこのアクションを別のアクションから呼び出すと、Security.check()コールが省略され、セキュリティ保護されたコードが呼び出されます。 Security.check()がtrueを返さない限り、@ CheckはsecuredMethod()の実行を許可すべきではないと考えました。どのように私はそれがこのように動作するようにすることができます任意のアイデア?

答えて

4

理由は、Secureコントローラの仕組みです。 @Checkアノテーションは、@Beforeでアノテーションされたメソッドを介して、リクエストの開始時にのみ検証されます。サンプルコードでどのように処理されているかを見ることができます。

通常は、(セキュリティ上の問題が発生する可能性がある)セキュリティ制限の少ないメソッドから大きな制限を持つメソッドを呼び出さないでください。あなたのケースでは、使用しているワークフローを検証する必要があります。

+0

しかし、なぜリダイレクトはありませんか?私の[記述](http://stackoverflow.com/questions/3899670/how-can-i-influence-the-redirect-behavior-in-a-play-controller)が正しい場合は、リダイレクトが必要なので、新しいリクエスト。 – niels

+0

私は同じことを思っていましたが、あなたのコードとルートを確認する必要があります –

関連する問題