Struts2之Session Token機制理解及使用

一、學習案例:關於表單重複提交的問題,其實沒什麼可講的,這個功能可以說很雞肋,特別在現在的項目中很少會用,實際意義不大,之所以講,是爲了引出攔截器,給下一章學習攔截器做個鋪墊,大家就當看雜文一樣,隨便瞟幾眼就OK

 

二、案例分析:token機制很類似於驗證碼的實現方式,當頁面請求掃描到<s:token/>便籤時就會調用標籤處理類,而標籤處理類會生成一個隨機數返回給頁面,另外在服務器端拷貝一份也就是防止session中,當請求到達服務器後,就會對比兩個字符串,相等則通過,不相等證明是重複提交則跳轉到錯誤頁面。和驗證碼最大的區別就是,重複提交的的意思是在第一次提交成功後,在成功後的頁面做刷新操作或按瀏覽器返回按鈕在不刷新當前頁面的前提下再次提交則會觸發token重複提交機制,也就會跳轉向重複提交失敗頁面。

a)在提交頁面的form表單中添加<s:token/>標籤。

b)struts.xml中的表單提交向的action中配置

<result name=invalid.token>/提交失敗頁面.jsp</result>

namestruts2官方規則,千萬別寫錯。

c)b步驟的action中添加攔截器

<interceptor-inf name=token></interceptor>

<interceptor-inf name=defaultStack></interceptor>

順序不能錯。

意思是:token機制是發生在數據賦值、類型轉換等攔截器之前的。這樣才能防止數據重複提交。

 

 

三、經驗之談:

a)還是那句話學習框架一定要經常看源碼。源碼都是前輩大牛的心血,無論是編碼形式還是編碼質量那都是相當的高,有這樣一份珍貴的學習資料,你不看,你說你還看啥吧。

b)防止表單重複提交有很多方法,比如上一章的重定向就可以防止。不過在項目中一般我們有很多種方法防止表單重複提交。我最鍾愛的就是讓提交按鈕失效,當點擊提交按鈕後,我們就通過js讓按鈕直接失效,這樣就不會有人亂點了。

c)寫程序就跟玩遊戲一樣,千萬別鑽牛角尖。我們始終要堅信,語言是萬能的。所以有時候一種方式不行就換一種,問題終會解決的。比如我今天爲了搞301,讓23hhr.com重定向到www.23hhr.com。整了一上午,在網上各種文章都扒了,各種方法都試了,結果就是不行。網上說的最多的就是配置.htaccess。我用的apache發向代理的tomcatapache怎麼配置就是不訪問.htaccess。最後實在沒招了,我就在vhost.cfg直接配置,它就行了。所以有時候,我們要善於動手實驗,光靠想是想不出來什麼的。

 

四、參考項目:token機制過於簡單不提供項目參考,按分析配置就OK了。

 

五、每日一樂:

追女神很久了,今天終於成功了,女神問我什麼感覺,

我說覺得有點不敢相信,她說,不信你捏自己臉,我照做了,然後我醒了……

 

最終解釋權歸愛尚合夥人所有,轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章