我在企业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吗?
任何其他可能更清洁的建议都会受到赞赏。
答案 0 :(得分:0)
我决定使用jsonp向其他域发送跨域消息以清除会话。似乎在起作用。
答案 1 :(得分:0)
最好的方法是在不同的服务器上使用相同的安全令牌。但正如你所说,这是不可能的。下一个解决方案是使用HTTPSessionListener在用户退出主域或会话超时时清除会话。这将确保跨域的会话同步。