代码之家  ›  专栏  ›  技术社区  ›  Sergey Karpushin

Hazelcast+春季安全+分布式会话=如何使其工作?

  •  0
  • Sergey Karpushin  · 技术社区  · 10 年前

    灵感来自 http://docs.hazelcast.org/docs/latest/manual/html/websessionreplication.html 我决定在我的SpringMVC+Security应用程序中试用它。

    我遇到的第一个问题是-Hazelcast抱怨找不到 sessionRegistry 豆我通过将以下bean添加到spring安全上下文中很快地解决了这个问题

    <bean id="sessionRegistry"
        class="org.springframework.security.core.session.SessionRegistryImpl" />
    

    但我马上就遇到了下一个问题,仍然无法解决。 这就是发生的情况:

    1. 启动tomcat(假设应用程序也将启动)
    2. 登录网站-确定
    3. 注销-确定( 关注 :注销正常, JSESSIONID REMEMBER_ME_TOKEN cookie已清除,但 hazelcast.sessionId cookie是 不是 清除)
    4. 重新启动tomcat
    5. 导航到索引页
    6. 错误 :无限重定向到 invalidSessionStrategy 发生

    经过一些调试,我发现了几个事实:

    • 这是因为在里面 SessionManagementFilter#doFilter 检查 request.isRequestedSessionIdValid() 回报 false
    • 杰西索尼德 榛子色会话ID 不同(这是我设计的)
    • 看起来问题是因为调用之间的不一致 request.isRequestedSessionIdValid() request.getSession() -看起来好像前者回来了 假的 ,然后后者假设创建新会话-这不会发生

    到目前为止,我所做的努力(但无济于事):

    • 手动清除 榛子色会话ID 使用内置spring安全注销处理程序的cookie(没有成功,coockie再次出现,值相同)
    • 变通办法 https://github.com/hazelcast/hazelcast/issues/3049 这是关于发送 HttpSessionDestroyedEvent 注销时。未注意到任何影响
    • 尝试使用 杰西索尼德 作为hazelcast cookie名称的会话id(在这种情况下,我只能打开ap一次,所有后续请求将导致无限重定向到 invalid-session )

    所以……显然,这并不像Hazelcast官方文件中所说的那么简单。有什么办法让它工作吗?

    1 回复  |  直到 10 年前
        1
  •  1
  •   Sergey Karpushin    10 年前

    看来我找到了解决方法 infinite redirect to invalid session 问题我不确定这是捷径还是100%正确的方法。。。

    我创建了自定义 InvalidSessionStrategyImpl 具有以下代码:

    @Override
    public void onInvalidSessionDetected(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        if (request.getSession(false) instanceof HazelcastHttpSession) {
            HazelcastHttpSession hazelCastSession = (HazelcastHttpSession) request.getSession(false);
            hazelCastSession.invalidate();
        } else {
            request.getSession();
        }
        redirectStrategy.sendRedirect(request, response, redirecctTo);
    }
    

    p、 如果你好奇的话——在那之后,我又遇到了另一个问题:过度的CPU消耗。Hazelcast消耗100%CPU。完全不可接受的问题(尤其是像Jelastic这样的云部署,您需要按资源使用情况付费)。