使用Play 1.2.3我试图跨多个控制器实现安全模块。
我已将- play -> secure
添加到我的依赖项中,安全模块出现在我的项目中。我已导入默认安全路由* / module:secure
,自定义了authenitcation方法,并使用@With(Secure.class)
注释了所有控制器。
我遇到的问题是,当我在控制器之间移动时,我会在第193行Null Pointer Exception
收到secure:module
:return Java.invokeStaticOrParent(security, m, args);
我遇到的第二个问题是,当从同一个控制器中调用方法时,某些调用最多可能需要20秒才能完成,而不包含安全模块,这些调用通常是即时的。 编辑:这是不相关的 - 安全模块对加载时间没有明显影响
我的问题是有没有其他人在Play中跨多个控制器实现安全模块,如果是这样,他们是否遇到过这些问题?
问题在于我的模板中使用了标签 - 而不是在安全模块的实现中。请参阅以下内容以了解原因以及如何解决。
答案 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}