Ajax請求和Filter配合案例解析

2022-09-21 09:30:14 字數 4350 閱讀 4756

案例引入

現在有這樣乙個問題,就是在提交大片文字評論的時候,前台拿到資料之後給後台傳送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...