dwrsessionerror问题的解决办法

dwrsessionerror问题的解决办法

ID:8870920

大小:18.50 KB

页数:4页

时间:2018-04-10

dwrsessionerror问题的解决办法_第1页
dwrsessionerror问题的解决办法_第2页
dwrsessionerror问题的解决办法_第3页
dwrsessionerror问题的解决办法_第4页
资源描述:

《dwrsessionerror问题的解决办法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、DWRSessionError问题的解决办法问题情境再现使用的Dwr版本2.0在一台服务器上的不同端口上部署了同样的程序(tomcat5.5.2880端口,tomcat5.5.288080端口)使用浏览器先后登陆80,8080端口的程序,都不注销,保持会话状态。然后浏览器切换到8080的一个使用了DWRajax功能的页面上,浏览器弹出SessionError的提示。但是,如果切换到80端口的程序上,同样进入到一个使用了dwrajax技术的页面上,没有SessionError的提示。问题诊断:初步怀疑浏览器的问题。检查浏览器的cookie中的jsessionid的值。因

2、为我们知道,Http协议本身是无状态的,服务器标识同一次会话的过程就是借助于cookie中的某个值或者通过url重写的方式来实现。这也是jsp程序的session原理。检查发现:cookie中存在2个sessionid项,sessionid的值不同。因为站点地址相同,url也相同(除了端口不同外),因此,浏览器“误”认为是同一个程序,把缓存的cookie项都发送回了服务器。然后再观测ajax请求的值,即httppost或get的参数值如下:callCount=1page=/web/initRolePermission.actionhttpSessionId=3F5F7

3、D7C14D40667FF126DC6F9038EE5scriptSessionId=5B2B53E512648E78C92393E052589CA3859c0-scriptName=adminRolePerActionc0-methodName=findPermissionc0-id=0c0-param0=string:181batchId=0在这里,务必注意httpSessionId=3F5F7D7C14D40667FF126DC6F9038EE5,实际上,一般情况下,httpSessionId和cookie中的jsession值是相同的。至于dwr组件中,为什么

4、要加上httpSessionId,这是因为dwr开发团队考虑到了跨站攻击问题。因此,通过验证dwrajax请求中的httpSessionId值,来防止跨站攻击。在重现,诊断问题过程中,发现SessionError的信息是来自dwrajax请求的响应中,抛出的异常是java.lang.SecurityException,因此可以怀疑这个错误信息是源于dwr源代码中的。用Eclipse打开下载到的dwr源代码。搜索SessionError的信息,然后在org.directwebremoting.dwrp.Batch类中找到了,其部分代码如下:/***Checkthatth

5、isrequestisnotsubjecttoaCSRFattack*@paramrequestTheoriginalbrowser'srequest*@paramsessionCookieName"JSESSIONID"unlessithasbeenoverridden*/privatevoidcheckNotCsrfAttack(HttpServletRequestrequest,StringsessionCookieName){//Achecktoseethatthisisn'tacsrfattack//http://en.wikipedia.org/wiki/

6、Cross-site_request_forgery//http://www.tux.org/~peterw/csrf.txtif(request.isRequestedSessionIdValid()&&request.isRequestedSessionIdFromCookie()){StringheaderSessionId=request.getRequestedSessionId();if(headerSessionId.length()>0){StringbodySessionId=getHttpSessionId();//Normalcase;ifsam

7、esessioncookieissuppliedbyDWRand//inHTTPheaderthenallisokif(headerSessionId.equals(bodySessionId)){return;}//Weblogicaddscreationtimetotheendoftheincoming//sessioncookiestring(evenforrequest.getRequestedSessionId()).//UsetherawcookieinsteadCookie[]cookies=request.getCookies();f

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。