1

私の JSF 2.0 アプリケーションでは、以下のコードを使用して Siteminder リクエスト ヘッダー値をセッション変数に設定しているセッション コーピングされた User Bean があります。

FacesContext context = FacesContext.getCurrentInstance();
    Map<String, String> requestHeaderMap = context.getExternalContext().getRequestHeaderMap();
context.getExternalContext().getSessionMap().put(GlobalConstants.SITEMINDER_USERID, userId);
    context.getExternalContext().getSessionMap().put(GlobalConstants.SITEMINDER_USERGROUPS, groups);
    context.getExternalContext().getSessionMap().put(GlobalConstants.SITEMINDER_USERNAME, userName);

doFilter メソッドの下のフィルターから、次を使用してセッション変数を読み取っています

HttpSession ses = req.getSession();

しかし、ses は NULL を返し、フィルターは認証に失敗します。ここで何が起こっているのか誰にも教えてもらえますか? これは常に発生するわけではなく、10 人に 1 人のユーザーに発生します。もう 1 つの情報は、アプリケーションが負荷分散用の 2 つのマネージド インスタンスを持つ weblogic サーバー上にあるということです。したがって、最初のリクエストが1つのインスタンスに到達し、2番目のリクエストが他のインスタンスに到達したときに、セッションがnullにリセットされているかどうかはわかりません

4

1 に答える 1

0

発生している可能性があることの 1 つは、アプリが共有セッションに対応していないことです。

http://docs.oracle.com/cd/E15051_01/wls/docs103/webapp/sessions.html

また、負荷が分散されているため、1 つの管理対象サーバーが他の管理対象サーバーによって (メモリ上で) セッションが開始されていない可能性があります。

適切な weblogic.xml または weblogic-application.xml をコンフィグレーションして、メモリやキャッシュなどを介したセッション共有を有効にします。

その他の可能性は、ロード バランサーのアプライアンス/ソフトウェアに依存するスティッキー セッションを使用するようにロード バランサーを構成することです。

http://dev.fyicenter.com/Interview-Questions/JavaScript/What_does_the_term_sticky_session_mean_in_a_web_.html

ご挨拶。

于 2013-10-14T20:33:05.970 に答える