2011-07-05 94 views
2

我在Controller中使用@Check註釋進行了操作。@從其他操作調用操作時,檢查不起作用

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

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

當我從瀏覽器調用此操作時,它會從Security類調用布爾檢查(字符串配置文件)。但是當我從另一個動作調用此動作時:

Application.securedMethod(); 

它只是調用安全代碼,省略Security.check()調用。我想,@Check不應該允許執行securedMethod(),除非Security.check()返回true。任何想法我怎麼能讓它表現得像這樣?

回答

4

原因是安全控制器的工作方式。 @Check註釋僅在請求開始時通過用@Before註釋的方法進行驗證。你可以看到它是如何在示例代碼中完成的。

通常它不應該是一個問題,因爲您不應該使用安全限制較少的方法調用具有較大限制的方法(因爲它可能導致安全問題)。在你的情況下,你應該驗證你正在使用的工作流程,因爲你可能想要避免這個呼叫。

+0

但爲什麼沒有重定向?如果我的[描述](http://stackoverflow.com/questions/3899670/how-can-i-influence-the-redirect-behavior-in-a-play-controller)是正確的應該有一個重定向,所以一個新的請求。 – niels

+0

我想知道的一樣,但我們需要看到你的代碼和路由 –