麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

表單重復提交的問題

2019-11-10 20:33:00
字體:
來源:轉載
供稿:網友

       先參考這3篇博文

http://blog.csdn.net/gideal_wang/article/details/4189694

http://developer.51cto.com/art/201311/417014.htm

http://www.cnblogs.com/xdp-gacl/p/3859416.html 

下面通過注解和攔截器來實現該功能:

package com.nasuxwx.plug.web.formtoken;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Inherited;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 驗證form表單重復提交注解 * @title FormToken.java * @since 2015年11月13日 */@Documented@Inherited@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface FormToken {	/**	 * 是否移除formToken參數,默認false:不移除	 * @title isRemove	 * @author dinggh	 * @since 2015年11月13日	 * @return	 */	boolean isRemove() default false;		/**	 * 是否添加formToken參數,默認false:不添加	 * @title isAdd	 * @author dinggh	 * @since 2015年11月13日	 * @return	 */	boolean isAdd() default false;}
package com.nasuxwx.plug.web.formtoken;import java.io.PRintWriter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.method.HandlerMethod;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import com.nasuxwx.plug.util.FormTokenProccessor;/** * 驗證form表單重復提交 * @title FormTokenInterceptor.java * @since 2015年11月13日 */public class FormTokenInterceptor extends HandlerInterceptorAdapter{	private Logger logger = LoggerFactory.getLogger(FormTokenInterceptor.class);	/**	 * 驗證form表單重復提交,如果未重復提交則移除session中的formToken	 */	@Override	public boolean preHandle(HttpServletRequest request,			HttpServletResponse response, Object handler) throws Exception {		// TODO Auto-generated method stub				if (handler.getClass().isAssignableFrom(HandlerMethod.class)) {			FormToken preFormToken = ((HandlerMethod) handler).getMethodAnnotation(FormToken.class);						//聲明需要防止表單重復提交,并且需要移除參數	        if (preFormToken!=null&&preFormToken.isRemove()) {	        	String formToken = (String) request.getSession().getAttribute("formToken");	    		String clientFormToken = request.getParameter("formToken");	    			    		boolean isRepeatSubmit = false;	    		if (StringUtils.isBlank(formToken)) {	    			isRepeatSubmit = true;	    		}	    			    		if (StringUtils.isBlank(clientFormToken)) {	    			isRepeatSubmit = true;	    		}	    			    		if (StringUtils.isNotBlank(clientFormToken)&&!clientFormToken.equals(formToken)) {	    			isRepeatSubmit = true;	    		}	    			    		if (isRepeatSubmit) {	    			logger.info("form表單重復提交!" + request.getServletPath());	    			response.reset();	    			PrintWriter out = response.getWriter();	    			out.print("FORM_REPEAT_SUBMIT");	    			out.flush();	    			out.close();	    			request.getSession().setAttribute("formValid", false);	    			return false;				}else {					request.getSession().removeAttribute("formToken");				}			}	        		}				return super.preHandle(request, response, handler);	}	/**	 * 設置formToken到session中	 */	@Override	public void postHandle(HttpServletRequest request,			HttpServletResponse response, Object handler,			ModelAndView modelAndView) throws Exception {		// TODO Auto-generated method stub		if (handler.getClass().isAssignableFrom(HandlerMethod.class)) {			FormToken preFormToken = ((HandlerMethod) handler).getMethodAnnotation(FormToken.class);						//聲明需要防止表單重復提交,并且需要添加參數	        if (preFormToken!=null&&preFormToken.isAdd()) {	        	String formTokenStr = FormTokenProccessor.getInstance().makeToken();	        	request.getSession().setAttribute("formToken", formTokenStr);			}					}		super.postHandle(request, response, handler, modelAndView);	}		}
package com.nasuxwx.plug.util;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Random;import sun.misc.BASE64Encoder;/** * form 表單驗證令牌 * @title FormTokenProccessor.java * @since 2015年11月12日 */public class FormTokenProccessor {    /*     *單例設計模式(保證類的對象在內存中只有一個)     *1、把類的構造函數私有     *2、自己創建一個類的對象     *3、對外提供一個公共的方法,返回類的對象     */    private FormTokenProccessor(){}        private static final FormTokenProccessor instance = new FormTokenProccessor();        /**     * 返回類的對象     * @return     */    public static FormTokenProccessor getInstance(){        return instance;    }        /**     * 生成Token     * Token:Nv6RRuGEVvmGjB+jimI/gw==     * @return     */    public String makeToken(){  //checkException        //  7346734837483  834u938493493849384  43434384        String token = (System.currentTimeMillis() + new Random().nextInt(999999999)) + "";        //數據指紋   128位長   16個字節  md5        try {            MessageDigest md = MessageDigest.getInstance("md5");            byte md5[] =  md.digest(token.getBytes());            //base64編碼--任意二進制編碼明文字符   adfsdfsdfsf            BASE64Encoder encoder = new BASE64Encoder();            return encoder.encode(md5);        } catch (NoSuchAlgorithmException e) {            throw new RuntimeException(e);        }    }}
	/**	 * 綁定銀行卡信息填寫頁面	 * @title toPtpMerBindCardPage	 * @since 2015年10月19日	 * @param page	 * @param request	 * @param model	 * @return	 */	@FormToken(isAdd=true)	@RequestMapping("/toPtpMerBindCardPage.nasuxwx")	public String toPtpMerBindCardPage(Integer page,HttpServletRequest request,Model model){		Site site = Context.getCurrentSite(request);				String url = site.getTemplate("ump/toPtpMerBindCardPage.html");		PPUser pPUser = (PPUser) request.getSession().getAttribute("user");				String orderIdPre = request.getParameter(NasuxConstant.UMPPARAM);		if (StringUtils.isBlank(orderIdPre)) {			orderIdPre = request.getParameter("orderIdPre");		}		model.addAttribute("orderIdPre", orderIdPre);		if (pPUser!=null) {			model.addAttribute("UserId", pPUser.getId());						}else {			return "forward:/weixin/register.nasuxwx";		}				return url;	} 
	/**	 * 綁定銀行卡	 * @since 2015年10月19日	 * @param page	 * @param request	 * @param model	 * @return	 */	@FormToken(isRemove=true)	@RequestMapping("/ptpMerBindCard.nasuxwx")	//@ResponseBody	public String ptpMerBindCard(Integer page,HttpServletRequest request,Model model){		String url = "";		PPUser pPUser = (PPUser) request.getSession().getAttribute("user");				Map<String, String> paramMap = new HashMap<String, String>();		String cardId = request.getParameter("cardId");//用戶在頁面中輸入的綁定的銀行卡號		cardId = StringUtils.trim(cardId);		paramMap.put("card_id", cardId);				//String bankName = request.getParameter("bankName");		/*String msg = this.checkBankCardNo(cardId, bankName);		if (!"1".equals(msg)) {			return msg;		}*/				String orderIdPre = request.getParameter("orderIdPre");		paramMap.put("orderIdPre", orderIdPre);				url = this.umpService.ptpMerBindCard(paramMap, pPUser);				return "redirect:"+url;	}下面是一些JS調用驗證的方法

/** * 重置formToken */function resetFormToken(){		$.Ajax({        type: "POST",        url:"/formtoken/resetFormToken.nasuxwx?_t="+new Date(),        data:$("#registerForm").serialize(),// 要提交的表單         success: function(msg) {        	if(msg){        		var formTokenInputs = $("input[name='formToken']");        		$.each(formTokenInputs,function(i,formTokenInput){        			$(formTokenInput).val(msg);        		});        	}        }        	});}function validFormTokenAndSubmitForm(formToken,formName){	$.ajax({        type: "POST",        url:"/formtoken/validFormToken.nasuxwx?_t="+new Date(),        data:{"formToken":formToken},// 要提交的表單         success: function(msg) {        	if(msg&&msg=="true"){        		$("#"+formName).submit();        	}        }        	});}
package com.nasuxwx.plug.web.formtoken;import javax.servlet.http.HttpServletRequest;import org.apache.commons.lang.StringUtils;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;@Controllerpublic class FormTokenController {	@FormToken(isAdd=true)	@RequestMapping("/formtoken/resetFormToken.nasuxwx")	@ResponseBody	public String resetFormToken(HttpServletRequest request){		String formToken = (String) request.getSession().getAttribute("formToken");		return formToken;	}		@RequestMapping("/formtoken/validFormToken.nasuxwx")	@ResponseBody	public String validFormToken(HttpServletRequest request,			@RequestParam(value="formToken")String clientFormToken){				String formToken = (String) request.getSession().getAttribute("formToken");		boolean isRepeatSubmit = false;		if (StringUtils.isBlank(formToken)) {			isRepeatSubmit = true;		}				if (StringUtils.isBlank(clientFormToken)) {			isRepeatSubmit = true;		}				if (StringUtils.isNotBlank(clientFormToken)&&!clientFormToken.equals(formToken)) {			isRepeatSubmit = true;		}				return !isRepeatSubmit?"true":"false";	}}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 激情综合在线观看 | 黑人三级毛片 | 毛片免费一区二区三区 | 国产精品九九久久一区hh | 中文字幕亚洲情99在线 | 免费国产一区二区视频 | 久久久tv | 久久久青青草 | 成人在线观看一区二区三区 | 中文字幕精品在线观看 | 黄色影院 | 91精品免费在线 | av大全在线播放 | 欧美成在线视频 | 成人一级黄色片 | 一级国产精品一级国产精品片 | 视频一区国产精品 | 91在线视频免费观看 | 欧美另类视频在线 | 麻豆一区二区99久久久久 | 久久国产一级片 | 中文字幕一二区 | 污黄视频在线播放 | 成人在线不卡 | 亚洲一区二区三区在线看 | 亚洲电影免费观看国语版 | 久久久久国产精品久久久久 | 看毛片电影 | 国产瑟瑟视频 | 国产在线观看 | 91成人天堂久久成人 | 99re66热这里只有精品8 | 成年性羞羞视频免费观看无限 | av电影在线网站 | 久久久国产一区二区三区 | 国产成人免费精品 | 欧美成人综合视频 | 亚洲射情 | 素人视频在线观看免费 | 亚洲一区二区免费 | 黄色的视频免费观看 |