4

我正在使用的第三方应用程序通常允许用户在网站的任何位置添加书签。登录后,用户将被重定向到请求的原始页面。不幸的是,通过委托定制的单点登录,此功能会丢失。也就是说,如果您使用书签访问产品中的特定页面(或收到电子邮件或关注外部链接),如果您尚未登录,则转到登录页面,然后返回主页面应用程序页面而不是请求的页面。

如果我可以使用请求的原始 URL 设置一个 cookie,我就可以通过 JavaScript 使用该信息在登陆主页时更改位置。

假设主页是 /app/index.jsp - 如果我可以获得一个 cookie 来记住除此之外的任何 URL - 我可以恢复用户在登录后转到所请求页面的功能。这可能吗?

4

1 回答 1

3

我自己找到了解决方案...使用 mod_rewrite 我可以通过查找 JSESSIONID cookie 来键入初始请求。以下放在我的服务器虚拟主机部分中时实现了我的目标。

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/app/*$
RewriteCond %{REQUEST_URI} !^/content/.*$
RewriteCond %{REQUEST_URI} !^/app/adm/.*$
RewriteCond %{REQUEST_URI} !^/app/index\.jsp$
RewriteCond %{REQUEST_URI} !^/favicon\.ico$
RewriteCond %{HTTP:Cookie} !^.*JSESSIONID=.*$
RewriteRule . - [co=appURI:%{REQUEST_URI}?%{QUERY_STRING}:.mydomain.com]

注意:我在上面为我不想为其设置 cookie 的页面添加了一些过滤器。我使用 JavaScript 在应用程序中检测、取消设置 cookie 和重定向以实现我的目标。

var appURI = getCookie("appURI");
if (typeof(appURI) != "undefined" && appURI != null && appURI != "") {
  mydomain.console.log("Found URI from SSO relocating to: " + appURI);
  setCookie("appURI", "", -1, "/", "mydomain.com");
  document.location.href = appURI;
}

请注意,上面的“setCookie”和“mydomain.console.log”是专有但简单的函数,它们根据它们的名称执行明显的操作。

于 2013-10-18T16:51:41.787 回答