踩雷长路漫漫任我闯。针对近期踩雷、填坑的过程做一下总结,说多了都是泪啊,但是酸爽还是要说出来。
问题一:No mapping found for HTTP request with URI [/a/service;jsessionid=153488x] in DispatcherServlet with name 'dispatcherServlet’
经过部分客户反映页面总是跑到404,让测试妹子复现,迟迟未见效果。
自己内心开始犯嘀咕,这到底是怎么回事呢。
于是乎开始抓日志进行分析,发现日志偶尔存在No mapping found for HTTP request with URI,深入分析发现接口url后面直接追加了
jsessionid=153488x,这样的话,url肯定匹配不到正常的服务,会直接提示404。
问题分析:
在Spring MVC当使用RedirectView或者"redirect:"前缀来做重定向时,Spring MVC最后会调用:response.sendRedirect(response.encodeRedirectURL(url));
对于IE来说,打开一个新的浏览器窗口,第一次访问服务器时,encodeRedirectURL()会在url后面附加上一段jsessionid,如果初始的url为"http://www.sina.com.cn",
最终得到的url为"http://www.sina.com.cn;jsessionid=15348830CEFC654550C7954CF801BE3"。
这个jsessionid很多时候会引起严重的问题,例如,如果你使用上述带有jsessionid的url直接访问新浪的网站,IE会向你报告:找不到服务器。
解决方案:
Spring MVC -重定向自动添加JSSESSID,在tomcat7环境下,web.xml添加如下配置,观察日志问题得以解决。
问题二:验签的问题
采用SpringMVC开发项目时,采用return redirect url跳转到其它占点,在跳转之前调用model的addAttribute添加参数,
发现跳转的url会自动把model的attribute参数追加到后面,导致下游
系统,验证报文时失败。
解决方案:
1.暂时将model的addAttribute放到return redirect 后面,得以解决;
2.springMVC的配置文件注解开关中配置"ignoreDefaultModelOnRedirect"变量为true,设置Spring 的 redirect 后不带参数。
10月份是多事之秋,多事之秋已经过去。11月已经到来,即将开启新的篇章,希望自己能够多提炼、分享。长路漫漫,任重而道远。