2012-02-08 10 views
1

http/sでリクエストを受信するJava EEアプリケーションがあります。要求には、クッキーまたはjsessionid要求パラメーターは含まれません。リクエストペイロードに基づいて、Java EEアプリケーションでリクエストをHttpSessionに関連付ける方法はありますか。

リクエストペイロードで、私はそのリクエストをHttpSessionに関連付けることができる文字列 "sessionid"を見つけることができます。私はセッションのマップをメモリに保存するメカニズムを実装することができましたが、それはクラスタ環境では(容易に)スケーラブルではありません。

リクエストをHttpSessionsに関連付けるための標準的なJava EEメカニズムは、要求を送信する第三者を制御しないため、私には利用できないクッキーまたはURL書き換えに基づいています。また、HttpServletRequestオブジェクトにはsetSession()メソッドがありません。

特定のJava EEサーバーや一部の分散キャッシュに依存することなく、要求をHttpSessionsに関連付ける簡単な方法はありますか?

答えて

5

数文:

  • サードパーティのクライアントがHTTP仕様に準拠していない、それはあなたがカスタムメカニズムが必要な場合、あなたはそれのすべてを実装する必要があり、あなたの問題
  • ではありません。つまり、HttpSessionに依存しないでください - 各セッションIDにMap<String, Object>を作成し、それをサポートしてください
  • 他の解決策では、コードをコンテナに差し込む必要がありますが、標準ソリューションはありません。
+0

私はHttpServletRequestにgetSessionがあることを知っています。 setSessionはありません。 –

+1

最初のポイントは、頭にまっすぐに釘を打ちます。クライアントを修正するか、担当者に修正を依頼してください。 – BalusC

+0

@VictorIonescu申し訳ありませんが、私はそれを誤解しています。その点を削除しました。他はまだ残っています。 – Bozho

0

私は前にその道を歩いていました。 HttpSession これは、各セッション(メモリではなくデータベースに保存する必要があります)やより洗練されたものとして、一意のIDと同じくらいシンプルにすることができます。 以下のリンクは、あなたが

  • HTTP basic authentication

  • Google's ClientLogin

    • OAuth

    • (Googleが非推奨ものの、その優れたアーキテクチャを研究する)

    を助けるしかし、はい、仕組みを変えるかもしれませんは、第三者がそれに準拠しなければならないことを意味します。

  • 関連する問題