有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

this article中,它解释了Spring会话如何通过合并第二个标识符为一个浏览器支持多个会话。默认情况下,该标识符名为_s,是请求URL中的查询字符串

我试图实现完全相同的功能,但是我希望使用自定义HTTP头,而不是查询字符串。我对整个想法还不太了解,有人能告诉我这是否可行,从哪里开始吗


共 (1) 个答案

  1. # 1 楼答案

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

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

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

    但是,您可以将CookieHttpSessionStrategy子类化,重写getCurrentSessionAlias方法以从标头中提取参数,并重写应用程序的默认会话策略,如下所示:

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

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