通过合并自定义HTTP标头支持每个浏览器的多个会话

时间:2016-12-22 03:16:33

标签: java spring spring-session

this article中,它解释了Spring Session如何通过合并第二个标识符来支持一个浏览器的多个会话。默认情况下,此标识符似乎称为(Item==apples) or (Item==milk),它是请求URL中的查询字符串。

我正在尝试实现完全相同的东西,但我想使用自定义HTTP标头而不是查询字符串。而且我对整个想法都不熟悉,有人可以告诉我这是否可行以及从哪里开始?

1 个答案:

答案 0 :(得分:1)

查询字符串参数_s用于查找用于给定请求的会话。在official documentation中,此参数称为会话别名参数

如果您浏览source code for Spring Session,您会注意到提取会话别名参数的任务被委托给HttpSessionManager接口。在当前代码库中,此接口只有一个实现 - CookieHttpSessionStrategy,它从查询字符串中提取参数(请参阅链接源代码中的第183行)。

因此,无法使用当前实现从HTTP标头中提取参数值(因为唯一可用的实现只能从查询字符串中提取它)。

但是,您可以继承CookieHttpSessionStrategy,覆盖getCurrentSessionAlias方法以从标头中提取参数,并覆盖应用程序的默认会话策略:

@Bean
public HttpSessionStrategy httpSessionStrategy() {
  return new MyHttpSessionStrategy();
}

其中,MyHttpSessionStrategy是您编写的自定义策略。