在this article中,它解释了Spring Session如何通过合并第二个标识符来支持一个浏览器的多个会话。默认情况下,此标识符似乎称为(Item==apples) or (Item==milk)
,它是请求URL中的查询字符串。
我正在尝试实现完全相同的东西,但我想使用自定义HTTP标头而不是查询字符串。而且我对整个想法都不熟悉,有人可以告诉我这是否可行以及从哪里开始?
答案 0 :(得分:1)
查询字符串参数_s
用于查找用于给定请求的会话。在official documentation中,此参数称为会话别名参数。
如果您浏览source code for Spring Session,您会注意到提取会话别名参数的任务被委托给HttpSessionManager
接口。在当前代码库中,此接口只有一个实现 - CookieHttpSessionStrategy
,它从查询字符串中提取参数(请参阅链接源代码中的第183行)。
因此,无法使用当前实现从HTTP标头中提取参数值(因为唯一可用的实现只能从查询字符串中提取它)。
但是,您可以继承CookieHttpSessionStrategy
,覆盖getCurrentSessionAlias
方法以从标头中提取参数,并覆盖应用程序的默认会话策略:
@Bean
public HttpSessionStrategy httpSessionStrategy() {
return new MyHttpSessionStrategy();
}
其中,MyHttpSessionStrategy
是您编写的自定义策略。