Struts2 防止表單重複提交

2021-09-24 10:36:04 字數 1460 閱讀 3130

token是為了防止表單重複提交,token 原理大致為:

1:顯示表單的那個 action 中使用 createtoken() 生成乙個隨機的 token值,並存放在服務端(session或者cache中),並且傳遞乙份到頁面中

2:表單頁面使用乙個隱藏表單域獲取後端傳過來的 token值,該表單頁面提交時會將此 token 值一同提交到後端

3:在表單頁面提交到的 actioin 中使用 validatetoken() 將服務端與表單隱藏域中的 token 值進行對比,如果服務端存在 token值並且與表單提交過來的值相等,證明是第一次提交。

4:每次校驗過後服務端的 token 值會立即被清除,所以當使用者重複提交時,後面的提交校驗都再也無法通過。從而實現了防止重複提交的功能,validatetoken 是在 synchronized 塊中執行的保障了多執行緒下的安全性。

token 會優先存入 me.settokencache(itokencache) 指定的 tokencache 中,如果未指定則預設使用 session 來存放

struts2的標籤都支援動態資料的訪問,標籤的屬性都可以使用ognl表示式。

struts2標籤的屬性具有型別,這些型別可以簡單地分為字串型別和非字串型別,對於字串型別的屬性,如果要訪問動態資料,需要使用%這樣的語法。例如:

include標籤的value屬性民是字串型別,struts2將對這個屬性進行解析,如果屬性值使用%包含,那麼%中的內容將被視為ognl表示式。如果屬性中沒有使用%,那麼屬性值將被直接看成是字串資料。例如:

對於非字串型別的屬性值,將直接作為ognl表示式進行求值。例如:

property標籤的value屬性是object型別,它的值username將作為ognl表示式進行求值,結果是值棧中位於棧頂的物件的username屬性的值。如果要為非字串型別的屬性直接指定字串資料,那麼需要使用ognl中的字串常量,即用單引號或雙引用將字串括起來。例如:

在property標籤的value屬性中,也可以使用%。不過使用%與不使用沒有什麼區別。struts2會忽略%的存在,把內容以ognl表示式來處理。

對property標籤的value屬性來說,%與』zhangsan』是相同的。因為value屬性的型別是object,所以value屬性的內容直接被作為ognl表示式處理。但struts2不會因為加了%而報錯,而是忽略掉%的存在,直接把內容取出做為ognl表示式處理。

總結一下,struts2標籤的屬性按照下列三個規則進行計算:

所有的字串屬性型別都會解析%這樣的語法。將%內容做為ognl表示式處理。

所有的非字串屬性型別都不會被解析,而是直接被看作乙個ognl表示式進行求值。

對於第二個規則的例外情況是,如果非字串屬性中使用了%語法,那麼%將被忽略,花括號中的內容將作為ognl表示式被計算。

當我們使用標籤時,忘記了某個屬性是字串型別,還是非字串型別,那麼有乙個冬的方法,那就是不考慮它是什麼型別,統一使用%語法。

struts2防止表單重複提交

struts 的 token 令牌 機制能夠很好的解決表單重複提交的問題,基本原理是 伺服器端在處理到達的請求之前,會將請求中包含的令牌值與儲存在當前使用者會話中的令牌值進行比較,看是否匹配。在處理完該請求後,且在答 送給 客戶端之前,將會產生乙個新的令牌,該令牌除傳給客戶端以外,也會將使用者會話中...

struts2防止表單重複提交 token

struts 的token 令牌 機制能夠很好的解決表單重複提交的問題,基本原理是 伺服器端在處理到達的請求之前,會將請求中包含的令牌值與儲存在當前使用者會話中的令牌值進行比較,看是否匹配。在處理完該請求後,且在答 送給 客戶端之前,將會產生乙個新的令牌,該令牌除傳給客戶端以外,也會將使用者會話中儲...

struts2 註解 防止表單重複提交

註解 在struts2中使用註解,主要完成對action的定義。但諸如常量定義 定義等還需要在struts.xml中完成。需要引入struts2 convention plugin jar action基本註解示例 namespace value test 對於xml中的namespace test...