【发布时间】: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