我正在构建一个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的代码。
我非常感谢这个问题的任何帮助,在此先感谢。