如何动态更改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,但这样就太过分了。
答案 0 :(得分:0)
在创建会话之后的下一个请求中,获取所有cookie
Cookie[] c = request.getCookies();
//for loop{
if(c.getName.equals("JSESSIONID")){
c.setDomain("....);
}
}