我正在构建一个J2EE Web应用程序,它使用带有OID后端的Oracle SSO作为验证用户的方法.如果用户想要使用该应用程序,首先他必须在SSO的登录页面上提供有效的登录名/密码.当用户完成使用该应用程序后,他可以点击退出按...
![](https://oss.womengda.net/imgfile/2310/1ER05V522310-12E2.jpg)
我正在构建一个J2EE Web应用程序,它使用带有OID后端的Oracle SSO作为验证用户的方法.
如果用户想要使用该应用程序,首先他必须在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()函数来删除SSO cookie(如某些Oracle论坛中所示):
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的代码.
我非常感谢您对这个问题的任何帮助,在此先感谢.
解决方法:
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" );
本文标题为:java – 无法从Oracle SSO注销
![](/xwassets/images/pre.png)
![](/xwassets/images/next.png)
- Java SpringBoot 获取接口实现类汇总 2023-05-08
- Java界面编程实现界面跳转 2023-01-13
- @FeignClient注解中属性contextId的使用说明 2023-01-13
- SpringBoot设置动态定时任务的方法详解 2022-12-27
- Java中Map接口使用以及有关集合的面试知识点汇总 2023-03-21
- Java之旅--定时任务(Timer、Quartz、Spring、LinuxCron) 2023-09-01
- 用JS实现购物网站商品放大镜效果 2023-08-02
- Spring MVC数据绑定方式 2023-06-30
- Struts1之url截取_动力节点Java学院整理 2023-07-31
- 学习java一定要知道的垃圾收集器 2023-02-27