当前位置: 首页 > 面试题库 >

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

沈博延
2023-03-14
问题内容

我已经Redis在旧版Spring MVC应用程序中实现了Spring Session
。我还使用DefaultCookieSerializer来设置jvmRoute,因为我需要一些服务器亲和力才能运行Talend作业。

当运行前端并检查Chrome中的页面时,我看到了jvmRoute该会话的附件。如果将其从“ node1”编辑为“
node2”,则保留该会话。如果我在部署期间重新部署服务器并发出请求,我将被重定向到集群中的另一个节点,这意味着Spring Sessions可以正常工作。

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

如果我恢复为Tomcat会话并jvmRoute在的Engine组件中设置,则在Chrome和调试代码中都会server.xml看到jvmRoute该会话ID
的附加内容。

到底是DefaultCookieSerializer做什么的?我认为它会在创建cookie时对其进行编辑,这就是cookie的存储方式Redis。因此,jmvRoute如果您以这种方式进行设置,则在创建该cookie后对它的任何使用都应附带附件。


问题答案:

DefaultCookieSerializer到底能做什么?我认为它会在创建cookie时对其进行编辑,这就是将cookie存储在Redis中的方式。因此,如果以这种方式进行设置,则在创建此cookie后对它的任何使用都应附加jmvRoute。

首先,重要的是要意识到cookie本身没有存储在会话存储中(即您的Redis)。存储的是会话本身及其属性的表示。

除了会话存储之外,会话管理的另一个重要方面是用户的HTTP请求与存储的会话之间的关联。有了Spring Session的Servlet
API支持,这是它的责任HttpSessionIdResolver,并且默认情况下,Spring
Session使用基于cookie的实现,即CookieHttpSessionIdResolver。中还有一个基于HTTP标头的实现HeaderHttpSessionIdResolver。我之所以这样说是因为,重要的是要意识到会话存储是在不同级别上运行的独特关注点。

现在,关于CookieHttpSessionIdResolver,它将cookie的编写和读取问题委托给CookieSerializerDefaultCookieSerializer默认情况下是……)。根据其配置,DefaultCookieSerializer在写入和读取会话cookie时会考虑许多选项,例如cookie名称,是否对Base64编码cookie值,是否使用httpOnlycookie指令等。

但是,我无法获得服务器关联性,因为调试Spring应用程序中的HttpServletRequest时,HttpServletRequest.getSession()。getId()中没有jvmRoute(尽管十六进制数字与我在Chrome中看到的匹配)
),这就是我转交给塔伦德工作的目的。

这是我不理解的部分-
如果您能够HttpSession从当前的情况下解决问题,HttpServletRequest那么您知道jvmRoute它必然会正确吗?这是jvmRoute当前JVM的,否则会话将无法HttpServletRequest在此JVM的处理下解决。

什么是spring会议和Tomcat的会话管理之间的不同,是在Tomcat中jvmRoute是会话ID生成相关的问题,而与spring会议将jvmRoute在会话cookie序列化的环境中使用。



 类似资料:
  • 我们在客户端上安装了我们的根证书,https连接适用于。 但是如果我们尝试使用,它会失败: 证书在客户端上。见: 版本:PIP1.4。1.

  • 问题内容: 我在诸如Amazon AWS和Cloud9等各种云平台上使用Codeception。默认情况下,这两个都没有GUI。我的问题是,您可以在这种类型的系统上运行Selenium吗?还是我需要以某种方式获取GUI? 问题答案: Selenium只是一个库,因此,如果您在配备GUI的系统上运行它,它并不特别在乎。您可能要问的是:如果我使用Selenium打开浏览器,那么该浏览器是否可以在没有G

  • 问题内容: 我试图在HashMap中找到一个键。我可以使用’get’打印选定的键,但是在if语句中使用’containsKey’时,找不到该键。 我知道该键存在于Map中,但它一直返回false。有什么想法的人吗? 我的代码: 这是Location类的代码: 问题答案: 您必须确保该类已正确实现其和方法(文档)。也就是说,如果两个对象实际上相等,则它们应该共享一个公共哈希码,并且它们的方法应该返回

  • 因此,正如一个人在之前的帖子中所说的,我会使用: 包括行末的“我的文件”。 由于未使用,我想我应该在标准输出中接收操作的结果。然后执行它并获得(注意,我使用而不是只是为了查看是否可以根据需要修改文件,因为在本例中,文件已经有了所需的行): 所以如您所见,文件没有更改。我做错了什么? 感谢阅读

  • 问题内容: 好的,这是我的问题。我有一个简单的jQuery Ajax请求,当我将DataType设置为“ JSON”时我无法工作。 这实际上是我的ajax文件。该如下所示: 当我运行jQuery脚本时,我收到了Firebug的200:OK响应,而当我查看响应时,得到了以下内容: 但是,在.body-item div中没有​​显示任何内容,也没有尝试使用alert()。 另外,如果我运行相同的代码而

  • 从https://projects.spring.io/spring-framework/,我有一个spring framework hellpworld程序。我删除了注释。然而,程序仍然可以像以前一样运行。为什么?这里的角色是什么?