动态更改JSESSIONID cookie的域名?

时间:2018-01-04 14:51:56

标签: java session tomcat servlets cookies

如何动态更改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没有被过滤器截获(它不是由webapp生成的,而是由容器生成的。)

[edit]无法使用httpRequest.getSession().getServletContext().getSessionCookieConfig().setDomain()方式,因为看起来sessioncookieconfig在初始化上下文后只是readonly ..

[edit]无法使用tomcat阀门导致响应已经提交(isCommitted为true)。另外tomcat不使用reponse addCookie或header methodes来设置JSESSIONID cookie。而Response类是最终的,因此不能为那个创建包装器。

[edit]使用jetty自定义SessionHandler也无法正常工作,因为无法访问请求对象。

我非常怀疑这一切都是不可能的。我能看到的唯一解决方案是在servlet容器前放置一个代理并以这种方式更改cookie,但这样就太过分了。

1 个答案:

答案 0 :(得分:0)

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

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