關(guān)注于J2SE,J2EE以及開(kāi)源方面的技術(shù)。
1,先在一個(gè)Action中,調(diào)用saveToken(HttpServletRequest request)方法。然后轉(zhuǎn)向帶有表單的JSP頁(yè)面。
2,在JSP頁(yè)面提交表單給一個(gè)Action,再這個(gè)Action中進(jìn)行是否為重復(fù)提交的判斷。
1, 由第一個(gè)Action調(diào)用saveToken(HttpServletRequest request),這個(gè)方法內(nèi)部實(shí)現(xiàn)如下:
token.saveToken(request);
這個(gè)方法的實(shí)現(xiàn)如下:
這個(gè)方法調(diào)用generateToken方法實(shí)現(xiàn)如下:
generateToken完畢后,將得到的唯一值setAttribute到session中。
Globals.TRANSACTION_TOKEN_KEY的值是:” org.apache.struts.action.TOKEN”
然后跳轉(zhuǎn)到JSP頁(yè)面。
2, JSP頁(yè)面的Struts自定義標(biāo)簽 <html:form>的標(biāo)簽類(lèi):org.apache.struts.taglib.html. FormTag
這個(gè)類(lèi)的doStartTag()方法會(huì)調(diào)用本類(lèi)的renderToken()方法。
這樣子會(huì)生成類(lèi)似于
的隱藏標(biāo)簽。
然后提交到一個(gè)Action中,在Action中用isTokenValid()方法進(jìn)行比較session中” org.apache.struts.action.TOKEN”的這個(gè)key所對(duì)應(yīng)的值和提交來(lái)的request中的” org.apache.struts.action.TOKEN”的這個(gè)value是否一致。
如果為true,那么證明可以提交。如果為false,證明已經(jīng)重復(fù),不允許提交。