首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.

2013-09-13 
防止刷新/后退引起的重复提交问题的Java Token代码,非Struts - mash...Struts本身有一套完善的防止重复提

防止刷新/后退引起的重复提交问题的Java Token代码,非Struts - mash...

Struts本身有一套完善的防止重复提交表单Token(令牌)机制,但笔者目前的项目自写的framework没有用到Struts,故也得自写防止用户因为后退或者刷新来重复提交表单内容的Token机制。不难,容易实现。

实现原理:一致性。jsp生成表单时,在表单中插入一个隐藏<input>字段,该字段就是保存在页面端的token字符串,同时把该 字符串存入session中。等到用户提交表单时,会一并提交该隐藏的token字符串。在服务器端,查看下是否在session中含有与该token字 符串相等的字符串。如果有,那么表明是第一次提交该表单,然后删除存放于session端的token字符串,再做正常业务逻辑流程;如果没有,那么表示 该表单被重复提交,做非正常流程处理,可以警告提示也可以什么也不做。

看代码。

首先是Token主类。类很简单,而且主要方法都给doc注释了

防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash./*
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.*?blog:?http://hi.baidu.com/bobylou
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.*?$Revision:?1.1?$
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.*?$Date:?2007/07/18?10:02:55?$
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.*?$Author:?bobrow$
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.*/
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.package?com.paizuo.framework.util;
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.import?java.util.ArrayList;
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.import?javax.servlet.http.HttpSession;
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.public?class?Token?{
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.????private?static?final?String?TOKEN_LIST_NAME?=?"tokenList";
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.????public?static?final?String?TOKEN_STRING_NAME?=?"token";
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.????private?static?ArrayList?getTokenList(HttpSession?session)?{
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.???????Object?obj?=?session.getAttribute(TOKEN_LIST_NAME);
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.???????if?(obj?!=?null)?{
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.??????????return?(ArrayList)?obj;
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.???????}?else?{
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.??????????ArrayList?tokenList?=?new?ArrayList();
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.??????????session.setAttribute(TOKEN_LIST_NAME,?tokenList);
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.??????????return?tokenList;
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.???????}
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.????}
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.????private?static?void?saveTokenString(String?tokenStr,?HttpSession?session)?{
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.???????ArrayList?tokenList?=?getTokenList(session);
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.???????tokenList.add(tokenStr);
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.???????session.setAttribute(TOKEN_LIST_NAME,?tokenList);
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.????}
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.???
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.????private?static?String?generateTokenString(){
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.???????return?new?Long(System.currentTimeMillis()).toString();
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.????}
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.????/**
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.?????*?Generate?a?token?string,?and?save?the?string?in?session,?then?return?the?token?string.
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.?????*?
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.?????*?@param?HttpSession
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.?????*????????????session
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.?????*?@return?a?token?string?used?for?enforcing?a?single?request?for?a?particular?transaction.
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.?????*/
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.????public?static?String?getTokenString(HttpSession?session)?{
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.???????String?tokenStr?=?generateTokenString();
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.???????saveTokenString(tokenStr,?session);
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.???????return?tokenStr;
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.????}
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.????/**
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.?????*?check?whether?token?string?is?valid.?if?session?contains?the?token?string,?return?true.?
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.?????*?otherwise,?return?false.
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.?????*?
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.?????*?@param?String
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.?????*????????????tokenStr
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.?????*?@param?HttpSession
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.?????*????????????session
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.?????*?@return?true:?session?contains?tokenStr;?false:?session?is?null?or?tokenStr?is?id?not?in?session
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.?????*/
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.????public?static?boolean?isTokenStringValid(String?tokenStr,?HttpSession?session)?{
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.???????boolean?valid?=?false;
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.???????if(session?!=?null){
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.??????????ArrayList?tokenList?=?getTokenList(session);
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.??????????if?(tokenList.contains(tokenStr))?{
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.?????????????valid?=?true;
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.?????????????tokenList.remove(tokenStr);
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.??????????}
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.???????}
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.???????return?valid;
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.????}
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.}
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.

怎么使用?

在jsp页面端。

首先import该类:

<%@ page import="com.paizuo.framework.util.Token" %>

表单包含隐藏的token字符串:

?

防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.<form>
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.<input?type="hidden"?name="<%=Token.TOKEN_STRING_NAME?%>"?value="<%=Token.getTokenString(session)?%>">
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.</form>

?

在Server端action中进行检验。

?

防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.if(Token.isTokenStringValid(request.getParameter(Token.TOKEN_STRING_NAME),?request.getSession())){
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.//进行正常业务流程
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.}
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.else{
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.//进行防重复提交处理流程
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.}
防止刷新/后退引起的重复提交有关问题的Java Token代码,非Struts - mash.

完毕。

热点排行