案例引入
現在有這樣乙個問題,就是在提交大片文字評論的時候,前台拿到資料之後給後台傳送ajax請求,然後後台有乙個防止sql注入的filter,這個filter得到這個前台傳過來的資料之後,進行合法性校驗,如果沒有校驗成功,那麼要跳轉到error.jsp頁面進行顯示錯誤資訊。現在讓我們看看怎麼實現這個需求。
思路一:請求**實現
ajax請求
$.ajax(,
success:function(data),
error:function()
});防止sql注入filter
package com.yiyexiaoyuan.filter;
import j**a.io.ioexception;
import j**a.util.enumeration;
import j**ax.security.auth.message.c程式設計客棧allback.privatekeycallback.request;
//過濾sql關鍵字的filter
public class sqlfilter implements filter }
system.out.println("提交方式:"+req.getmethod());
system.out.println("被匹配字串:" + sql);
if (sqlvalidate(sql))
else
}// 校驗
protected static boolean sqlvalidate(string str)
}return false;
}public void init(filterconfig filterconfig) throws servletexception
public void destroy()
}web.xml配置
sqlfilter
sqlfilter
com.yiyexiaoyuan.filter.sqlfilter
sqlfilter
/servlet/*
分析,ajax請求demoservlet,然後請求先被防止sql注入這個filter過濾器先過濾,然後過濾到的請求引數構成乙個匹配字串,然後檢查是否是惡意**,如果是的話,請求**。但是很遺憾,邏輯上這個是對的,但是ajax請求是區域性重新整理的,最後是要回到ajax請求發起的這個頁面的,所以請求**不會實現,我們看下一種實現邏輯。
思路二:返回值進行判斷
這個思路的邏輯是這樣的:在filter過濾掉資訊的時候,給ajax請求回送乙個json資料,然後返回給前台,前台拿這個資料進行判斷是否是惡意**和良好**。再進行下一步的處理。
ajax請求
$.ajax(,
success:function(data)
else
},error:function()
});防止sql注入的filter
//過濾sql關鍵字的filter
public class sqlfilter implements filter
程式設計客棧}
system.out.println("提交方式:"+req.getmethod());
system.out.println("被匹配字串:" + sql);
if (sqlvalidate(sql))
else
}// 校驗
protected static boolean sqlvalidate(string str)
}return false;
}public void init(filterconfig filterconfig) throws servletexception
public void destroy()
}思路三:異常+跳轉實現
這個思路的邏輯是這樣的。後台的filter過濾掉惡意注入**的話,丟擲runtimeexception(),然後導致ajax請求失敗,然後**ajax請求的error方法。但是我們錯誤頁面的資料怎麼傳送過去呢?經過我認真思考之後,我們可以這樣做,在session存乙個error_messgae值,然後ajax請求的error方法跳轉到錯誤頁面,然後進行取值渲染錯誤頁面。
ajax請求
$.ajax(,
success:function(data),
error:function()
});防止sql注入filter
//過濾sql關鍵字的filter
public class sqlfilter implements filter }
system.out.println("提交方式:"+req.getmethod());
system.out.println("被匹配字串:" + sql);
if (sqlvalidate(sql))
else
}// 校驗
protected static boolean sqlvalidate(string str)
}return false;
}public void init(filterconfig filterconfig) throws servletexception
public void destroy()
}error.jsp實現
">
錯誤頁面
系統出錯了,請稍後再試......
錯誤資訊是: $
這樣就很巧妙得實現了filter攔截並友好提示。
本文標題: ajax請求和filter配合案例解析
本文位址:
ajax同步請求和非同步請求
這裡講解一下ajax 同步和非同步的差異,先看2 段 一 二 同步和非同步的差異如下 obj.open post url,true ajax非同步 obj.open post url,false ajax同步 對於 一,為非同步的ajax請求,執行結果為 先執行alert 2 再執行alert 1 ...
Ajax中get請求和post請求
我們在使用ajax向伺服器傳送資料時,可以採用get方式請求伺服器,也可以使用post方式請求伺服器,那麼什麼時候該採用get方式,什麼時候該採用post方式呢?get請求和post請求的區別 1.使用get請求時,請求所帶的引數會跟在url後傳遞,而post請求則是作為http訊息的實體內容傳送給...
ThinkPHP 頁面請求和AJAX
thinkphp 內建了一些常量來判斷請求型別 常量 說明 is get 判斷是否是get方式提交 is post 判斷是否是post方式提交 is put 判斷是否是put方式提交 is delete 判斷是否是delete方式提交 is ajax 判斷是否是ajax提交 request meth...