Struts Token 使用
1,先在一個(gè)Action中,調(diào)用saveToken(HttpServletRequest request)方法。然后轉(zhuǎn)向帶有表單的JSP頁面。
2,在JSP頁面提交表單給一個(gè)Action,再這個(gè)Action中進(jìn)行是否為重復(fù)提交的判斷。




















Struts Token 機(jī)制:
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頁面。
2, JSP頁面的Struts自定義標(biāo)簽 <html:form>的標(biāo)簽類:org.apache.struts.taglib.html. FormTag
這個(gè)類的doStartTag()方法會調(diào)用本類的renderToken()方法。
























































這樣子會生成類似于


的隱藏標(biāo)簽。
然后提交到一個(gè)Action中,在Action中用isTokenValid()方法進(jìn)行比較session中” org.apache.struts.action.TOKEN”的這個(gè)key所對應(yīng)的值和提交來的request中的” org.apache.struts.action.TOKEN”的這個(gè)value是否一致。
如果為true,那么證明可以提交。如果為false,證明已經(jīng)重復(fù),不允許提交。