我在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。任何想法我怎么能让它表现得像这样?
答案 0 :(得分:4)
原因是安全控制器的工作方式。 @Check注释仅在请求开始时通过@Before注释的方法进行验证。您可以在示例代码中看到它是如何完成的。
通常它不应该是一个问题,因为你不应该从安全性限制较少的方法调用具有更大限制的方法(因为它可能导致安全问题)。在您的情况下,您应该验证您正在使用的工作流程,因为您可能希望避免该呼叫。