从其他操作调用操作时,@ Check不起作用

时间:2011-07-05 14:06:04

标签: security playframework

我在Controller中有一个使用@Check注释保护的操作。

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

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

当我从浏览器调用此操作时,它会从Security类调用boolean check(String profile)。但是,当我从另一个动作中调用此动作时:

Application.securedMethod();

它只是调用安全代码,省略Security.check()调用。我想,@ Check应该不允许执行securedMethod(),除非Security.check()返回true。任何想法我怎么能让它表现得像这样?

1 个答案:

答案 0 :(得分:4)

原因是安全控制器的工作方式。 @Check注释仅在请求开始时通过@Before注释的方法进行验证。您可以在示例代码中看到它是如何完成的。

通常它不应该是一个问题,因为你不应该从安全性限制较少的方法调用具有更大限制的方法(因为它可能导致安全问题)。在您的情况下,您应该验证您正在使用的工作流程,因为您可能希望避免该呼叫。