3

メイン アプリケーションからベンダー ログイン ページに移動する必要があります。セッションが有効な場合、メイン アプリケーションで選択されたデータはベンダー ページに表示され、セッションにデータが保存されます。これを処理するために、Tomcat ではベンダー ログイン JSP の開始時に以下のコードがありました。

request.getSession().invalidate();

現在、Websphere Application Server に移行しています。同じコードが WAS では機能しません。IllegalStateException が発生しています。どこかで、WAS が Cookie を介してセッションを処理することを読みました。そのため、セッションがすでに無効化されている場合は IllegalStateException がスローされます。

WAS のコードを次のように変更しました。 userId は、メイン アプリケーションのセッションで保存しているユーザー ID です。

if ((request.getSession() != null) && (request.getSession().getAttribute("userId") != null)) { // Old session
    request.getSession().invalidate();
}

制御が if 条件内にある場合でも、IllegalStateException が発生します。私たちの要件では、ベンダー ログイン JSP の開始時にすべてのセッション パラメータを削除して、何も渡されないようにする 1 つの代替手段があります。しかし、そのためには、各パラメーター (ほぼ 20 個あります) を 1 つずつ削除する必要があります。また、将来、セッションで保存する新しいパラメータがある場合は、この jsp を更新する必要があります。

古い場合、最初にセッション全体を無効にする解決策はありますか?

4

3 に答える 3

2

次のコードで問題を解決しました。

<%@page session="false"%>

<%
   HttpSession session = request.getSession();
   if (session!=null) {
      session.invalidate();
   }
%>

メイン ログイン jsp とベンダー ログイン jsp の両方にこのコードを追加しました。そのため、jsp がロードされるたびに、HTTP セッションの自動作成が排除されます ( http://docs.oracle.com/cd/A97688_16/generic.903/bp/j2ee.htm#1008677 )。次に、セッションを明示的に作成します。このコードは、Websphere Application Server で完全に機能するようになりました。

于 2013-09-23T03:24:02.757 に答える
1

いくつかの調査の後、それは問題ないようです。

  HttpSession session = req.getSession(false);
    if(session == null){
       //valid session doesn't exist
       //do something like send the user to a login screen
    }
    if(session.getAttribute("username") == null){
       //no username in session
       //user probably hasn't logged in properly
    }

    //now lets pretend to log the user out for good measure
    session.invalidate();

ここにリンクがあります

于 2013-09-21T07:16:50.357 に答える
0

私は試していませんが、そのようなことを試すことができます。

if ((request.getSession() != null) && 
            (request.isRequestedSessionIdValid()) { 
    request.getSession().invalidate();
}
于 2013-09-21T07:11:32.270 に答える