Play Framework 2.2 を使用してマルチテナント アプリケーションを構築しようとしていますが、問題が発生しました。ユーザーが要求しているドメインのサイト ID を識別するセッション キーをグローバルonRouteRequest
(またはJava)に設定したいと考えています。onRequest
文字通り数十の他のフレームワークでは、この種のことは無痛ですが (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 のいずれかでソリューションの例を受け入れます。