您的位置:首页 > 编程语言 > Java开发

使用struts2自带拦截器防止页面刷…

2017-09-21 16:11 387 查看
方法1:

第一步:在添加或编辑页面的form下面加入标签<s:token></s:token>

第二步:在struts2配置文件的添加或编辑方法中加入

        <interceptor-ref
name="token"></interceptor-ref>

       
<result name="invalid.token"
type="redirectAction">jumpaddorder</result>

注意:其中jumpaddorder是重复提交之后你想要访问的方法名,可以改成你需要的。

     
此拦截器要放在默认拦截器下面

 

方法2:

一、把Token .java复制到tools包下

package tools;

 

import java.util.ArrayList;

 

import javax.servlet.http.HttpSession;

 

public class Token {

private static final String TOKEN_LIST_NAME = "tokenList";

 

    public static final String TOKEN_STRING_NAME = "token";

 

    private static ArrayList getTokenList(HttpSession session) {

       Object obj = session.getAttribute(TOKEN_LIST_NAME);

       if (obj != null) {

          return (ArrayList) obj;

       } else {

          ArrayList tokenList = new ArrayList();

          session.setAttribute(TOKEN_LIST_NAME, tokenList);

          return tokenList;

       }

    }

 

    private static void saveTokenString(String tokenStr, HttpSession session) {

       ArrayList tokenList = getTokenList(session);

       tokenList.add(tokenStr);

       session.setAttribute(TOKEN_LIST_NAME, tokenList);

    }

   

    private static String generateTokenString(){

       return new Long(System.currentTimeMillis()).toString();

    }

 

    

    public static String getTokenString(HttpSession session) {

       String tokenStr = generateTokenString();

       saveTokenString(tokenStr, session);

       return tokenStr;

    }

 

    

    public static boolean isTokenStringValid(String tokenStr, HttpSession session) {

       boolean valid = false;

       if(session != null){

          ArrayList tokenList = getTokenList(session);

          if (tokenList.contains(tokenStr)) {

             valid = true;

             tokenList.remove(tokenStr);

          }

       }

       return valid;

    }

}

 

二、在添加页面

头部加入<%@ page import="tools.Token" %>  

表单内加入<input type="hidden" name="<%=Token.TOKEN_STRING_NAME %>" value="<%=Token.getTokenString(session) %>" />

三、在相应的方法中:

HttpServletRequest request = ServletActionContext.getRequest();

if(Token.isTokenStringValid(request.getParameter(Token.TOKEN_STRING_NAME), request.getSession())){  

//进行正常业务流程  

}else{  

//进行防重复提交处理流程  

}  

 

 

 

OK!祝君好运!

 

 

转载请注明出处:http://blog.sina.com.cn/xilexu
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: