代码之家  ›  专栏  ›  技术社区  ›  DaithiG

SpringSession DefaultCookieSerializer.setJvmRoute可以工作,但是HttpServletRequest没有所需的jvmRoute

  •  2
  • DaithiG  · 技术社区  · 8 年前

    我已经用 Redis DefaultCookieSerializer 设置 jvmRoute ,因为我需要一些服务器关联才能运行Talend作业。

    合资经营 附加到会话。如果我将其从“node1”编辑为“node2”,则会话将被保留。如果我重新部署服务器并在部署期间发出请求,我将被重定向到集群中的另一个节点,这意味着Spring会话工作得很好。

    但是,我无法获取服务器关联,因为当我调试 HttpServletRequest HttpServletRequest.getSession().getId() 没有 其中(尽管十六进制数与我在Chrome中看到的匹配),这就是我传递给Talend作业的内容。

    如果我返回到Tomcat会话并设置 合资经营 server.xml ,我看到了 在Chrome和调试代码时附加到会话id。

    到底是什么 是吗?我认为它在创建cookie时对其进行编辑,这就是cookie的存储方式 Redis公司 jmvRoute 如果你那样设置的话就附加了。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Vedran Pavic    8 年前

    DefaultCookieSerializer具体做什么?我以为它会在创建cookie时对其进行编辑,这就是cookie在Redis中的存储方式。因此,如果您以这种方式设置了jmvRoute,那么在创建之后对该cookie的任何使用都应该附加jmvRoute。

    除了会话存储,会话管理的另一个重要方面是用户的HTTP请求与存储的会话的关联。对于Spring会话的Servlet API支持,这是 HttpSessionIdResolver ,默认情况下,Spring会话使用基于cookie的实现,即。 CookieHttpSessionIdResolver . 在 HeaderHttpSessionIdResolver . 我之所以这么说是因为必须认识到会话存储是在不同级别上运行的不同关注点。

    现在,关于 ,它将cookie的写入和读取问题委托给 CookieSerializer (与 DefaultCookieSerializer 作为。。。好吧,默认实现)。根据它的结构, 在写入和读取会话cookie时,将尊重许多选项,即cookie名称、是否以Base64编码cookie值、是否使用 httpOnly

    但是,我无法获得服务器关联性,因为当我在Spring应用程序中调试HttpServletRequest时,HttpServletRequest.getSession().getId()中没有jvmRoute(尽管十六进制数与我在Chrome中看到的匹配),这就是我传递给Talend作业的内容。

    这是我不明白的部分-如果你能解决 HttpSession 从当前 HttpServletRequest 那你知道吗 jvmRoute 它一定是对的?是那个 合资经营 否则会话将无法解析 由这个JVM处理。

    Spring会话和Tomcat的会话管理的不同之处在于 是 session id generation related concern 在春季会议期间 合资经营