ユーザーを認証する手段として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を削除するコード。
よろしくお願いします。