我正在尝试使用 Play Framework 2.2 构建多租户应用程序,但遇到了问题。我想在全局onRouteRequest
(或onRequest
Java)中设置一个会话密钥,用于标识用户请求的域的站点 ID。在许多其他框架中,这种类型的东西是无痛的(例如 Django),但我了解到 Play 中的会话对象显然是不可变的。
所以,现在,我有这样的事情:
override def onRouteRequest(request: RequestHeader): Option[Handler] = {
if (request.session.get("site").isEmpty){
val id = models.Site.getSiteUIDFromURL(request.host.toLowerCase()).toString()
if (!id.isEmpty){
//what goes here to set the session?
}else{
//not found - redirect to a general notFound page
}
}
super.onRouteRequest(request)
}
而且,虽然它不是使用数据库查找的最有效方式,但它现在可以用于测试。我需要能够在全局中设置会话密钥,但完全不知道如何做到这一点。如果有更好的方法我会全神贯注(也许包装我的控制器?)。
我对 Java 或 Scala 中的解决方案示例持开放态度。