跨多个控制器的安全模块

时间:2011-11-15 10:10:15

标签: java playframework

使用Play 1.2.3我试图跨多个控制器实现安全模块。

我已将- play -> secure添加到我的依赖项中,安全模块出现在我的项目中。我已导入默认安全路由* / module:secure,自定义了authenitcation方法,并使用@With(Secure.class)注释了所有控制器。

我遇到的问题是,当我在控制器之间移动时,我会在第193行Null Pointer Exception收到secure:modulereturn Java.invokeStaticOrParent(security, m, args);

我遇到的第二个问题是,当从同一个控制器中调用方法时,某些调用最多可能需要20秒才能完成,而不包含安全模块,这些调用通常是即时的。 编辑:这是不相关的 - 安全模块对加载时间没有明显影响

我的问题是有没有其他人在Play中跨多个控制器实现安全模块,如果是这样,他们是否遇到过这些问题?

修改

问题在于我的模板中使用了标签 - 而不是在安全模块的实现中。请参阅以下内容以了解原因以及如何解决。

1 个答案:

答案 0 :(得分:0)

抛出空指针异常的原因是因为在我的模板中我正在调用:

#{secure.check}
    <li><a href="@{Secure.logout()}">Logout</a></li>
#{/secure.check}

我奇怪地认为这是一个模板标签来检查是否启用了安全性 - 但它实际上需要后跟一个'profile'类型 - 这不是我指定的也没有实现(因此例外)。

为了解决这个问题,我添加了一个基本模板标签,用于检查安全关联会话是否正在使用中:

#{if session.username}
    #{doBody /}
#{/if}

可以简单地实现如下:

#{secure.secure}
    <li><a href="@{Secure.logout()}">Logout</a></li>
#{/secure.secure}