Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';无法从Oracle SSO注销_Java_Oracle_Cookies_Single Sign On_Oid - Fatal编程技术网

Java Can';无法从Oracle SSO注销

Java Can';无法从Oracle SSO注销,java,oracle,cookies,single-sign-on,oid,Java,Oracle,Cookies,Single Sign On,Oid,我正在构建一个J2EE web应用程序,它使用Oracle SSO和OID后端作为用户身份验证的手段 如果用户想要使用该应用程序,首先必须在SSO的登录页面提供有效的登录/密码 当用户使用完应用程序后,他可以单击注销按钮;在幕后,与此按钮关联的操作会使用户的会话无效,并使用以下Java代码清除Cookie: private void clearCookies(HttpServletResponse res, HttpServletRequest req) { res.setContent

我正在构建一个J2EE web应用程序,它使用Oracle SSO和OID后端作为用户身份验证的手段

如果用户想要使用该应用程序,首先必须在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论坛中所示)来删除SSO cookie:

函数delCookie(名称、路径、域){
var today=新日期();
//减去2天
var deleteDate=新日期(today.getTime()-48*60*60*1000);
var cookie=name+“=”
+((path==null)?“”:“;path=“+path”)
+((域==null)?“”:“域=”+domain)
+“到期日”;
document.cookie=cookie;
}
函数delOblixCookie(){
//将焦点设置为“确定”按钮
var isNetscape=(document.layers);
if(isNetscape==false | | navigator.appVersion.charAt(0)>=5){
对于(变量i=0;i 0){
subdomain=domain.substring(索引,domain.length);
if(子域索引of(“.”,1)>0){
delCookie('ObTEMC','/',子域);
delCookie('ObSSOCookie','/',子域);
}
域=子域;
index=domain.indexOf(“.”,1);
}
}
但是,我的用户在点击“注销”按钮后不会从SSO注销:虽然如果他们尝试访问索引页,会创建一个新会话,但SSO登录页不会显示给他们,他们可以直接进入主页而无需验证。只有当他们从浏览器中手动删除cookie时,登录页面再次显示-这不是我需要的:用户每次从应用程序注销时都必须提供其登录名/密码,因此我相信删除cookie的代码中一定有错误


我非常感谢您对这个问题的任何帮助,提前谢谢。

Cookies不会“删除”直到浏览器关闭。

Oracle有两个web SSO产品-Oracle Access Manager和Oracle Single Sign-On。您发布的Javascript代码是针对Access Manager的,因此对您没有帮助。此外,您不需要在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" );

您需要一个名为logout的页面,其中包含这些JavaScript函数

这就是报告所说的:

WebGate在收到包含以下内容的URL时注销用户 “logout.”(包括“.”),logout.gif和 logout.jpg,例如logout.html或logout.pl 接收带有此字符串的URL时,将设置ObSSOCookie的值 “注销”

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