我在使用Play Framework 2.2构建一个多租户应用程序,并遇到了问题。我希望在全局
因此,现在我有类似以下代码:
onRouteRequest
(或Java中的onRequest
)中设置一个会话键,以标识用户请求的域的站点ID。但是,与其他许多框架不同(例如Django),Play中的 session 对象显然是不可变的,因此这种事情变得非常困难。因此,现在我有类似以下代码:
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的解决方案示例。