天天看点

Spring MVC中jsessionid所引起的问题 和解决



转自:http://blog.csdn.net/seakingwy/article/details/1933687

jsessionid所引起的问题

在spring mvc当使用redirectview或者"redirect:"前缀来做重定向时,spring mvc最后会调用:

response.sendredirect(response.encoderedirecturl(url));

这是典型的java做事的方式,其他语言的服务器端平台并不会这样做。这个jsessionid很多时候会引起严重的问题,例如,如果你使用上述带有jsessionid的url直接访问新浪的网站,ie会向你报告:找不到服务器。

解决方法:

1. 不通过spring mvc做重定向,自己直接调用:

response.sendredirect(url);

return null; //告诉spring mvc我已经完成了处理

2. 修改spring mvc的代码,将:

改为:

3. encoderedirecturl()仅在无法确定浏览器是否支持cookie的时候才会在url后面附加上jsessionid,如果它能找到一个jsessionid的cookie,它就认为浏览器是支持cookie的。因此可以自己创建一个jsessionid的cookie来欺骗encoderedirecturl()。

cookie cookie = new cookie("jsessionid", "2jcligmgi6fh");

cookie.setmaxage(integer.max_value);

response.addcookie(cookie);

然后再调用spring mvc的重定向功能就没有问题了:

return new modelandview("redirect:"+url);

无疑,这里最好的方法是第3种方法。

转向相同的域,因为之前服务器已经设置了jsessionid这个cookie,并且可以得到这个cookie,因此就不必像上面第一次那样采用url重写的方式,url后面不会附加上jsessionid。因此当你的应用只会转向相同的域时,直接使用spring mvc的重定向(实际上是最后使用encoderedirecturl())不会有任何问题。

相关资料:

spring mvc redirectview appends jsessionid:

<a target="_blank" href="http://robobruin.blogspot.com/2005/12/spring-mvc-redirectview-appends.html">http://robobruin.blogspot.com/2005/12/spring-mvc-redirectview-appends.html</a>

jsessionid considered harmful:

<a target="_blank" href="http://randomcoder.com/articles/jsessionid-considered-harmful">http://randomcoder.com/articles/jsessionid-considered-harmful</a>

cookie和会话状态的工作原理及cookie欺骗|cookie,会话状态,cookie欺骗:

<a target="_blank" href="http://www.yuanma.org/data/2006/0908/article_1489.htm">http://www.yuanma.org/data/2006/0908/article_1489.htm</a>