<div id="article_content" class="article_content csdn-tracking-statistics tracking-click" data-mod="popu_519" data-dsm="post">javascript
<p>通常咱们会在过滤器里判断登陆状态,若是没登陆就跳转登陆页面,过滤器java核心代码以下:</p> <p></p> <div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><b>[java]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span class="tracking-ad" data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 496px; top: 250px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&width=16&height=16" wmode="transparent"></div></span><span class="tracking-ad" data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-j"><li class="alt"><span><span>UserItem loginUser = (UserItem)request.getSession().getAttribute(</span><span class="string">"loginUser"</span><span>); </span></span></li><li class=""><span><span class="keyword">if</span><span>(loginUser == </span><span class="keyword">null</span><span>) { </span></span></li><li class="alt"><span> response.sendRedirect(<span class="string">"/login.action"</span><span>); </span></span></li><li class=""><span>} </span></li></ol></div><pre code_snippet_id="437852" snippet_file_name="blog_20140729_1_3487486" name="code" class="java" style="display: none;">UserItem loginUser = (UserItem)request.getSession().getAttribute("loginUser"); if(loginUser == null) { response.sendRedirect("/login.action"); }</pre>这个对于普通页面来讲彻底没问题,可是在使用ajax的时候每每得不到想要的效果。由于页面根本没跳转,只是捕获到了登陆页面的源码而已。 <p></p> <p>网上一堆庸人给出一堆扯蛋的方法,主要有。</p> <p>1.返回的字符串附加登陆状态;<span style="color:#ff6666">(那么多,你愿意改么,并且先后端都得改,编码的时候还要总去考虑那个状态烦不烦)</span></p> <p>2.修改http头信息;<span style="color:#ff6666">(装B深沉型)</span></p> <p>3.修改jquery源文件判断;<span style="color:#ff6666">(勉强算个程序员,可是尽力不去动源,性能问题你还得解压再压缩,别人也不必定知道你改过源码)</span></p> <p>个人解决方案跟第三种方法思路接近,重写ajax方法实现前置处理,代码以下:</p> <p></p> <div class="dp-highlighter bg_javascript"><div class="bar"><div class="tools"><b>[javascript]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span class="tracking-ad" data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 534px; top: 685px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&width=16&height=16" wmode="transparent"></div></span><span class="tracking-ad" data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-c"><li class="alt"><span><span>jQuery(</span><span class="keyword">function</span><span>($){ </span></span></li><li class=""><span> <span class="comment">// 备份jquery的ajax方法 </span><span> </span></span></li><li class="alt"><span> <span class="keyword">var</span><span> _ajax=$.ajax; </span></span></li><li class=""><span> <span class="comment">// 重写ajax方法,先判断登陆在执行success函数 </span><span> </span></span></li><li class="alt"><span> $.ajax=<span class="keyword">function</span><span>(opt){ </span></span></li><li class=""><span> <span class="keyword">var</span><span> _success = opt && opt.success || </span><span class="keyword">function</span><span>(a, b){}; </span></span></li><li class="alt"><span> <span class="keyword">var</span><span> _opt = $.extend(opt, { </span></span></li><li class=""><span> success:<span class="keyword">function</span><span>(data, textStatus){ </span></span></li><li class="alt"><span> <span class="comment">// 若是后台将请求重定向到了登陆页,则data里面存放的就是登陆页的源码,这里须要找到data是登陆页的证据(标记)</span><span> </span></span></li><li class=""><span> <span class="keyword">if</span><span>(data.indexOf(</span><span class="string">'weinianjie'</span><span>) != -1) { </span></span></li><li class="alt"><span> window.location.href= Globals.ctx + <span class="string">"/login.action"</span><span>; </span></span></li><li class=""><span> <span class="keyword">return</span><span>; </span></span></li><li class="alt"><span> } </span></li><li class=""><span> _success(data, textStatus); </span></li><li class="alt"><span> } </span></li><li class=""><span> }); </span></li><li class="alt"><span> _ajax(_opt); </span></li><li class=""><span> }; </span></li><li class="alt"><span>}); </span></li></ol></div><pre code_snippet_id="437852" snippet_file_name="blog_20140729_2_3378019" name="code" class="javascript" style="display: none;">jQuery(function($){ // 备份jquery的ajax方法 var _ajax=$.ajax; // 重写ajax方法,先判断登陆在执行success函数 $.ajax=function(opt){ var _success = opt && opt.success || function(a, b){}; var _opt = $.extend(opt, { success:function(data, textStatus){ // 若是后台将请求重定向到了登陆页,则data里面存放的就是登陆页的源码,这里须要找到data是登陆页的证据(标记) if(data.indexOf('weinianjie') != -1) { window.location.href= Globals.ctx + "/login.action"; return; } _success(data, textStatus); } }); _ajax(_opt); }; });</pre> <p>在登陆页面的源码里面,你随便找个地方打个标记而后隐藏掉,好比个人标记就是weinianjie。对于$.get和$.post就不用说了吧,这两个方法都是调用了$.ajax方法的,因此也就自动获取了前置判断能力。</p> <p>大功告成,注意以上扩展须要放在你的全部ajax请求以前执行。</p> <p><br> <br> </p> </div>java