2009-11-03 88 views
4

我正在構建一個J2EE Web應用程序,該應用程序使用帶有OID後端的Oracle SSO作爲認證用戶的手段。無法從Oracle SSO註銷

如果用戶想要使用該應用程序,首先他必須在SSO的登錄頁面上提供有效的登錄名/密碼。

當用戶使用該應用程序時,他可以點擊註銷按鈕;在幕後,與此按鈕相關的操作無效用戶的會話,並使用下面的Java代碼清除了餅乾:

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事件,這是爲了

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登出他們打註銷按鈕後:雖然新的會話是通過調用delOblixCookie()函數(如在某些甲骨文論壇找到)刪除SSO餅乾如果他們嘗試訪問索引頁面時創建,那麼SSO登錄頁面不會顯示給他們,他們可以直接進入到主頁面而無需認證。只有當他們手動從瀏覽器中刪除cookie時,登錄頁面纔會再次顯示 - 而不是我所需要的:用戶每次從應用程序註銷時都必須提供其登錄名/密碼,所以我相信在應用程序中出現錯誤刪除Cookie的代碼。

我非常感謝這個問題的任何幫助,在此先感謝。

回答

3

Oracle擁有兩個Web SSO產品 - Oracle Access Manager和Oracle Single Sign On。您發佈的Javascript代碼是針對Access Manager的,所以它不會對您有所幫助。此外,您不需要在Javascript中執行任何操作以將用戶註銷。

查看OSSO文檔的logout部分。它建議使用下面的代碼:

// 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"); 
0

Cookies不會「刪除」,直到瀏覽器關閉。

1

你需要一個頁面,用註銷的名字,包括那些JavaScript函數。

這就是documentation說什麼:

的WebGate將用戶登錄時進行接收含有 一個URL「註銷」。 (包括「。」),除logout.gif和 logout.jpg外,例如logout.html或logout.pl。當WebGate 接收到包含此字符串的URL時,ObSSOCookie的值將設置爲 以「註銷」。