【发布时间】:2014-02-25 15:23:30
【问题描述】:
我在企业 weblogic 门户环境中工作。假设门户位于 a.whereiwork.com 上,并且有许多 wsrp portlet 以及几个指向另一个子域 b.whereiwork.com 中的页面的 iframed portlet(我们也拥有其代码库的旧应用程序)。我们目前有一个问题,用户从门户注销,但是当他们重新登录 b.whereiwork.com 上的会话时,仍然存在,并且我们在清除该子域上的 JSESSION ID 时遇到了一些问题。
这代表了一个重大的安全问题,因为下一个登录该计算机的人可能不是同一用户(例如,某人登录然后退出,而他的妻子登录并查看他的会话中的数据)。
我们想尝试的一件事是在注销页面上向子域添加 iframe,这会使子域上的会话无效。另一个子域的安全性有点不同,它比我在这里真正能介绍的要复杂。相信我的话 - 它不会起作用。
我们目前最好的想法是在 b.whereiwork.com 上添加一个顶级 servlet 过滤器,检查安全 cookie 是否已更改,然后调用 session.invalidate()。这样,如果用户注销,我们可以保持他们的会话不变,除非他们尝试重新登录。我们可以检测到它是一个不同的登录,因为登录是在一个单独的 cookie 中跟踪的。
所以我的问题是。在顶级过滤器中调用 session.invalidate() 是否有任何问题。假设过滤器链中的其他过滤器需要在会话中创建对象。我猜测在会话上调用 invalidate 后页面会返回不同的 JSESSIONID?
任何其他可能更清洁的建议将不胜感激。
【问题讨论】:
标签: java security session iframe cookies