4

ユーザーを認証する手段としてOIDバックエンドを備えたOracleSSOを使用するJ2EEWebアプリケーションを構築しています。

ユーザーがアプリケーションを使用したい場合は、最初にSSOのログインページで有効なログイン/パスワードを入力する必要があります。

ユーザーがアプリケーションの使用を終了したら、ログアウトボタンをクリックできます。舞台裏では、このボタンに関連付けられたアクションはユーザーのセッションを無効にし、次のJavaコードを使用してCookieをクリアします。

private void clearCookies(HttpServletResponse res, HttpServletRequest req) {
    res.setContentType("text/html");
    for (Cookie cookie : req.getCookies()) {
        cookie.setMaxAge(0);
        cookie.setPath("/");
        cookie.setDomain(req.getHeader("host"));
        res.addCookie(cookie);
    }
}

また、ログアウトボタンに関連付けられたonclick JavaScriptイベントがあります。これは、delOblixCookie()関数(一部のOracleフォーラムにあります)を呼び出すことによってSSOCookieを削除することになっています。

function delCookie(name, path, domain) {
  var today = new Date();
  // minus 2 days
  var deleteDate = new Date(today.getTime() - 48 * 60 * 60 * 1000);
  var cookie = name + "="
    + ((path == null) ? "" : "; path=" + path)
    + ((domain == null) ? "" : "; domain=" + domain)
    + "; expires=" + deleteDate;
  document.cookie = cookie;
}

function delOblixCookie() {
  // set focus to ok button
  var isNetscape = (document.layers);
  if (isNetscape == false || navigator.appVersion.charAt(0) >= 5) {
    for (var i=0; i<document.links.length; i++) {
      if (document.links.href == "javascript:top.close()") {
        document.links.focus();
        break;
      }
    }
  }
  delCookie('ObTEMC', '/');
  delCookie('ObSSOCookie', '/');

  // in case cookieDomain is configured delete same cookie to all subdomains
  var subdomain;
  var domain = new String(document.domain);
  var index = domain.indexOf(".");
  while (index > 0) {
    subdomain = domain.substring(index, domain.length);
    if (subdomain.indexOf(".", 1) > 0) {
      delCookie('ObTEMC', '/', subdomain);
      delCookie('ObSSOCookie', '/', subdomain);
    }
    domain = subdomain;
    index = domain.indexOf(".", 1);
  }
}

ただし、ユーザーがログアウトボタンを押した後、SSOからログアウトされません。インデックスページにアクセスしようとすると新しいセッションが作成されますが、SSOログインページは表示されず、メインに直接移動できます。認証せずにページ。ブラウザからCookieを手動で削除した場合にのみ、ログインページが再び表示されます。必要なものではありません。ユーザーはアプリケーションからログアウトするたびにログイン/パスワードを入力する必要があるため、 Cookieを削除するコード。

よろしくお願いします。

4

3 に答える 3

3

Oracleには、OracleAccessManagerとOracleSingleSignOnの2つのWebSSO製品があります。投稿したJavascriptコードはAccessManager用であるため、役に立ちません。さらに、ユーザーをログアウトするためにJavascriptで何もする必要はありません。

OSSOドキュメントのログアウトセクションをご覧ください。次のコードを使用することをお勧めします。

// Clear application session, if any
String l_return_url := return url to your application
response.setHeader( "Osso-Return-Url", l_return_url);
response.sendError( 470, "Oracle SSO" );
于 2009-11-03T20:58:11.430 に答える
1

これらのJavaScript関数を含むlogoutという名前のページが必要です。

それはドキュメントが言っていることです:

WebGateは、「logout」を含むURLを受信すると、ユーザーをログアウトします。(「。」を含む)、logout.gifとlogout.jpgを除いて、たとえばlogout.htmlやlogout.pl。WebGateがこの文字列を含むURLを受信すると、ObSSOCookieの値は「logout」に設定されます。

于 2012-12-12T14:32:50.633 に答える
0

ブラウザが閉じられるまで、Cookieは「削除」されません。

于 2009-11-03T13:06:52.463 に答える