【问题标题】:how to invalidate a users session如何使用户会话无效
【发布时间】: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


    【解决方案1】:

    我决定使用 jsonp 向另一个域发送跨域消息以清除会话。似乎工作正常。

    【讨论】:

    • 如何处理主域会话超时或主域服务器重启等问题。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-01-24
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      • 2017-08-22
      • 2018-04-27
      相关资源
      最近更新 更多