Websphere アプリケーション サーバー 7.0 に Web アプリケーションをデプロイしています。/j_security_check を使用したユーザー ログイン。セッション タイムアウトが発生すると、セッションは ivnvalidates になりますが、request.getUserPrincipal() はまだ null ではありません。null であるべきだと思います。ユーザープリンシパルをきれいにする方法は?
3 に答える
Vadim が提供するソリューションに加えて、2 つの代替回避策を説明する 2 つのリンクと、この一見反直観的な操作モードを引き起こすメカニズムの説明を共有したいと思います。
異なるアプリケーション間で SSO (シングル サインオン) を使用している場合、com.ibm.ws.security.web.logoutOnHTTPSessionExpire=true 設定を使用することには少し欠点があるかもしれません。この設定は、本質的に LTPA トークンを無効にします。サーバーのセキュリティ キャッシュは、タイムアウト時に LTPA トークンから更新されるため、無効化された LTPA により、残りのアプリケーションのユーザーの再検証 (ログイン) が発生します [1]。
[2] の質問 9 (私たちの質問と同じようです) への回答は、この問題の 2 つの代替回避策のアイデアを提供しています。この場合、有効期間と非アクティブに基づいてサーブレット フィルターを使用して認証をタイムアウトにすることができます。
[1]:セキュリティ キャッシュ、LTPA トークン、およびセッション タイムアウト(ログインが必要)
球のドキュメントで解決策を見つけました。
- 管理コンソールで、「セキュリティー」 > 「グローバル・セキュリティー」をクリックします。
- [カスタム プロパティ] で、[新規] をクリックします。
- 「名前」フィールドに、com.ibm.ws.security.web.logoutOnHTTPSessionExpire と入力します。
- [値] フィールドに true と入力します。
- [適用して保存] をクリックして、変更を構成に保存します。
- サーバーを再同期して再起動します。
心に留めておくべき重要なことは、有効/無効な HTTPSession は security と同じではないということです。
それらは完全に異なります。
サーバーによって認証されると、必要に応じて、HTTPSession がなくてもアプリケーションを動作させることができます。
サーバーによって認証されると、LTPA トークンがブラウザーに返され、LTPA トークンは約 2 時間アクティブになります (これがデフォルトです)。
HTTP セッションの有効期限が切れても、何もしなければ LTPA トークンには影響しません。
LTPA トークンを無効にする ibm_security_logout を試すことができます。
サーブレット API の新しいバージョンでは、適切なログアウト操作が利用できるので、これが不要になると思います。
HTH
マングル