如何使用户会话无效

时间:2014-02-02 00:07:06

标签: java security session iframe cookies

我在企业weblogic门户环境中工作。可以说门户网站位于a.whereiwork.com上,并且有许多wsrp portlet以及几个指向另一个子域中的页面的iframed portlet,b.whereiwork.com(遗留应用程序我们也拥有代码库)。我们遇到一个当前问题,即用户退出门户网站,但当他们在b.whereiwork.com上的会话中重新登录时会持续存在,并且我们在该子域上清除JSESSION ID时遇到了一些问题。

这代表了一个主要的安全问题,因为下一个登录该计算机的人可能不是同一个用户(例如有人登录然后他的妻子登录并查看他的会话中的数据)。

我们想要尝试的一件事是在注销页面上的子域中添加一个iframe,这会使子域上的会话无效。其他子域的安全性略有不同,这比我真正进入的更复杂。请相信我的话 - 它不会工作。

我们目前最好的想法是在b.whereiwork.com上添加一个顶级servlet过滤器,检查安全cookie是否已更改,然后调用session.invalidate()。这样,如果用户注销,我们可以按原样离开他们的会话,除非他们尝试重新登录。我们可以检测到它是不同的登录,因为登录是在单独的cookie中跟踪的。

所以我的问题是。在顶级过滤器中调用session.invalidate()是否有任何问题。假设过滤器链中的其他过滤器需要在会话中创建对象。我在会话上调用invalidate后会猜到页面会返回不同的JSESSIONID吗?

任何其他可能更清洁的建议都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

我决定使用jsonp向其他域发送跨域消息以清除会话。似乎在起作用。

答案 1 :(得分:0)

最好的方法是在不同的服务器上使用相同的安全令牌。但正如你所说,这是不可能的。下一个解决方案是使用HTTPSessionListener在用户退出主域或会话超时时清除会话。这将确保跨域的会话同步。