【问题标题】:Dynamically change domain of JSESSIONID cookie?动态更改 JSESSIONID cookie 的域?
【发布时间】:2018-06-14 07:59:22
【问题描述】:

如何动态更改tomcat或jetty生成的JSESSIONID cookie的域?

我偶然发现了这个: Sharing session data between contexts in Tomcat

但我需要根据请求执行此操作(以上内容基于上下文)。

例如:

request1 comes from www.testdomain1.com and needs the domain ".testdomain1.com".
request2 comes from www.testdomain2.com and needs the domain ".testdomain2.com". 

这些域在部署时是未知的,并且可以随时更改。

我使用了一个带有 HttpServletResponseWrapper 的简单 servlet 过滤器来处理来自我的应用程序的 cookie,但 JSESSIONID 没有被过滤器截获(它不是由 web 应用程序生成,而是由容器生成)。

[edit] 不能采用httpRequest.getSession().getServletContext().getSessionCookieConfig().setDomain() 的方式,因为在上下文初始化后 sessioncookieconfig 似乎是只读的..

[edit] 不能使用 tomcat 阀门,因为响应已经提交(isCommitted 为真)。此外,tomcat 不使用响应 addCookie 或标头方法来设置 JSESSIONID cookie。并且 Response 类是最终的,因此不能为该类创建包装器。

[edit] 使用码头自定义 SessionHandler 也不起作用,因为无法访问请求对象。

我高度怀疑这整件事是不可能的。我能看到的唯一解决方案是在 servlet 容器前面放置一个代理并以这种方式更改 cookie,但这有点矫枉过正。

【问题讨论】:

    标签: java session tomcat servlets cookies


    【解决方案1】:

    在创建会话之后的下一个请求中,获取所有 cookie

    Cookie[] c = request.getCookies();
    //for loop{
      if(c.getName.equals("JSESSIONID")){
             c.setDomain("....);
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-11-01
      • 2013-01-11
      • 2010-10-26
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 2011-06-22
      相关资源
      最近更新 更多