3

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 のいずれかでソリューションの例を受け入れます。

4

1 に答える 1