最近在做防止重复提交的功能,用到了令牌。在匹配成功之后会将session的token删掉,但是由于在action里面封装了公司框架的方法,执行完业务逻辑类后会有跳转,跳转也是同一个action,回到action后请求的token值还存在,在去匹配导致匹配不到,所以报重复提交操作了。现在想的办法就是,在清除session里保存的token时同时清除requset里token的值,但是不起作用,清除不掉。在处理业务逻辑跳转时请求的token还在,有没什么方法在一次请求完时,清掉token这个变量的值?代码如下:
Token比较代码
public static boolean isTokenStringValid(String tokenStr, HttpSession session) {
boolean valid = false;
if(CommUtil.isBlank(tokenStr))
valid=true;
if(session != null){
ArrayList tokenList = getTokenList(session);
if (tokenList.contains(tokenStr)) {
valid = true;
tokenList.remove(tokenStr);
}
}
return valid;
}
action处理代码:
public ActionForward executeAct(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws Exception {
	String token=req.getParameter("token");
	logger.debug("----------token:"+token);
	if(!Token.isTokenStringValid(token, req.getSession())){
		//进行防重复提交处理流程 非法操作,请勿重复提交!
		System.out.println("---------------重复提交");
		saveErrors(req, ErrMsg.getActionError(new AppException("resubmit")));
		return mapping.findForward("failure");
	}
	
	//此处是框架封装的方法,业务逻辑统一放到这里去操作,然后返回 forward进行跳转
         //forward里有调用其它逻辑类的方法。
	Dto returnVO = bo.exec(topicName, funcName, aDto, stBean);
	LazyDynaBean returnBean = new LazyDynaBean();
	DtoUtil.copyPropertys(returnBean, returnVO);
	try {
		BeanUtils.copyProperties(execForm, returnBean);
	} catch(Exception ee){}
	req.setAttribute("returnBean", returnBean);
	req.setAttribute("returnDto", returnVO);
	req.setAttribute("gctBean", returnVO);
	String output_forward = ForwardUtil.getOutputForward(returnVO, execForm, topic_func_bean, null);
	String append_url = null;
	append_url = GctUtilNew.getKeyUrl(topicBean, returnVO);
	ActionForward actionforward = ForwardUtil.createForward(bo, mapping, output_forward, append_url, false);
	return actionforward;
			
}
网上查过HttpServletRequestWrapper,但不知怎么实现!
请问大大们这个有什么好的解决办法没!多谢
                    删除request?                
                              ------解决方案--------------------
//清空params
req.getParameterMap().clear();