package com.hhwy.tag; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; import java.io.IOException; import java.util.UUID; /** * <br>描 述:防止重复提交 * <br>创 建 人:Jinzhaoqiang * <br>创建时间: 20181120 * <br>修改备注:无 * String token = request.getParameter("token");// 获取用户表单中提交的 String pageToken = (String) request.getSession().getAttribute("token"); if (token.equals(pageToken)) { // 令牌只能使用一次 request.getSession().removeAttribute("token"); //..业务处理 } else { System.err.println("不能重复提交"); } * <br>版本:1.0.0 */ public class TokenTag extends TagSupport { @Override public int doStartTag() throws JspException { String uuid = UUID.randomUUID().toString().replace("-", ""); pageContext.getSession().setAttribute("token", uuid); // 向页面上输出 JspWriter out = pageContext.getOut(); try { String html = "<input type='hidden' value='" + uuid + "' name='token'/>"; out.print(html); //out.clear(); 会将该标签之前的内容清除 out = pageContext.pushBody(); } catch (Exception e) { e.printStackTrace(); }finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } return EVAL_BODY_INCLUDE; } }
stm.tld
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <!-- 标签的版本 --> <tlib-version>1.0</tlib-version> <!-- 声明标签的名称 --> <short-name>stm</short-name> <!-- 声明标签的引用方式标识符号 --> <uri>/stm.com</uri> <!-- 声明自己的标签 --> <tag> <name>token</name> <tag-class>com.hhwy.tag.TokenTag</tag-class> <body-content>JSP</body-content> </tag> </taglib>
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ taglib prefix="token" uri="/stm.com" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> <%@ include file="../gen/common/header.html" %> <!--时间控件--> <%@ include file="../common/form.jsp" %> </head> <body class="white-bg"> <div class="wrapper wrapper-content animated fadeInRight ibox-content"> <form class="form-horizontal m" id="form-tProjectItemMaintenance-add"> <token:token></token:token> <div class="form-group"> <label class="col-sm-3 control-label">科目代码:</label> <div class="col-sm-8"> <input id="itemCode" name="itemCode" class="form-control" type="text"> </div> </div> <div class="form-group"> <label class="col-sm-3 control-label">科目名称:</label> <div class="col-sm-8"> <input id="itemName" name="itemName" class="form-control" type="text"> </div> </div> <div class="form-group"> <label class="col-sm-3 control-label">排序:</label> <div class="col-sm-8"> <input id="sort" name="sort" class="form-control" type="number" min="0" max="999"> </div> </div> <div class="form-group"> <label class="col-sm-3 control-label">备注:</label> <div class="col-sm-8"> <textarea id="remark" name="remark" class="form-control" type="text"></textarea> </div> </div> </form> </div> </body> </html>
java
@RequestMapping(value = "/add", method = RequestMethod.POST) @ResponseBody public AjaxResult addSave(HttpServletRequest request, TProjectItemMaintenance tProjectItemMaintenance) { String token = request.getParameter("token");// 获取用户表单中提交的token String pageToken = (String) request.getSession().getAttribute("token"); if (token.equals(pageToken)) { // 令牌只能使用一次 request.getSession().removeAttribute("token"); //..业务处理 return toAjax(tProjectItemMaintenanceService.insertTProjectItemMaintenance(tProjectItemMaintenance)); } else { return AjaxResult.error("不能重复提交"); } }