サーバー側での共有セッションのシナリオは何ですか?また、JAVA EEプラットフォームのサーバー側でセッションを共有するためのアプローチはありますか?
2 に答える
問題は、セッションを共有する必要があるオブジェクトを明示的に示していないため、次のオプションを提案できます。
1)同じサーバー(tomcat)上の異なるWebアプリ間でセッションを共有する必要がある場合は、次を使用できます。
<Host name="localhost" ...>
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
</Host>
2)サーバーがTomcatでない場合は、それぞれのサーバーのSSOオプションを参照してください。
3)CAS( http://www.jasig.org/cas )のような本格的なSSO製品を使用することもできます。これにより、ユーザー間ではなく、異なるサーバー間でアプリ間でセッションを共有できます。
4)異なるユーザー間でセッションを共有する必要がある場合は、同じゲームをプレイしている、同じ掲示板にアクセスしている、共同で変更できるなどの共有基準に基づいて、異なるクライアント(通常はブラウザ)間でセッションIDを渡すだけです。データ。ただし、セキュリティインフラストラクチャのほとんどは、セッションIDのマッピングを中心に構築されていることを理解してください。複数のユーザー間でセッションIDに明示的にアクセスできるようにする場合は、多くのセキュリティフィルターを自分で再作成する必要があります。
5)あるいは、最良のアプローチは、セッションとは異なる方法でオブジェクトの状態を管理することです。共有オブジェクトの状態は、より多くの標準に準拠した安全で監査可能な方法で、複数のセッション間で共有できます。
Java EE では、サーブレット仕様を確認する必要があります。オブジェクト HttpSession は、サーバー側でセッションを管理するための動作を提供します。
http://docs.oracle.com/javaee/5/tutorial/doc/bnagm.html
セッションに任意のオブジェクトを保存できますが、有効期限が切れるかオブジェクトが削除されるまでオブジェクトがセッションに残るため、この方法は危険な場合があります。多くのヒープメモリに。
セッションのオブジェクトは、有効期限が切れると削除されます。有効期限は、デプロイメント記述子 web.xml で構成するか、クライアントで設定できます。セッションの有効期限を指定しない場合、デフォルトは 30 分です。この 30 分は、ユーザーが行った最後の要求からカウントされます。
オブジェクトをセッションに保存しないことをお勧めします。リクエスト間でオブジェクトを渡すには、オブジェクト HttpServletRequest とメソッド setAttribute および getAttribute を使用する必要があります。製品全体の代わりに製品のIDを保存できるセッションに値を保存する必要があります。セッションの一般的な用途は、リクエスト以上に存続する必要があり、セキュリティ上の理由からコックルに保存したくない変数を保存することです。