java表单token_form 表单提交,防止重复提交,加token

大体步骤分为:

1.通过java 生成随机数放在http 的header 里面

String token = IdentityUtil.uuid32();

getRequest().getSession().setAttribute("server_token", token);

2.把生成token 放到隐藏域中,

String html = "";

try {

ctx.byteWriter.writeString(html);

} catch (IOException e) {

e.printStackTrace();

}

输出到页面;

3.写个拦截器,页面传过来的token与java生成token进行匹配;

public void intercept(DispatcherExecutor executor) {

String server_token = PuffContext.removeSessionAttr("server_token");

String client_token = PuffContext.getRequest().getHeader("Puff-ClientToken");

if (StringUtil.empty(server_token) || StringUtil.empty(client_token) || !server_token.equals(client_token)) {

if (PuffContext.ajax()) {

RetMsg msg = RetMsg.error(RetCode.ILLEGAL_SUBMIT, "非法表单提交申请!");

PuffContext.getResponse().setHeader("illegal_submit", "yes");

executor.setResult(ViewFactory.json(msg));

} else {

throw new IllegalArgumentException("非法表单提交申请!");

}

} else {

executor.execute();

}

//如果匹配了。重新生成token到页面,防止重复提交

String token = IdentityUtil.uuid32();

PuffContext.setSessionAttribute("server_token", token);

PuffContext.getResponse().setHeader("server_token", token);

}

4.页面

$.ajax({

url:"${ctxPath}/xx",

data:$(‘#form‘).serialize(),

type:"POST",

datatype:"json",

beforeSend: function(request) {

//把token 放到http header 中

request.setRequestHeader("Puff-ClientToken",$("#puff_beetl_client_token").val());

},

success:function(data){

if(data.code=="403"){

layer.close(index);

Popbox.sureWithBtn(data.msg);

}else{

var msg=eval("("+data.msg+")");

var code=msg.code;

if(code==success){

layer.close(index);

window.location.href="${ctxPath}/success;

}else{

flag=false;

layer.close(index);

Popbox.sureWithBtn(msg.message);

}

}

},

complete:function(request){

if(!flag){  //提交成功,就不改变http头部header,就是当失败才重新把token放到http header中

$("#puff_beetl_client_token").val(request.getResponseHeader("server_token"));

}

},

error:function(){

layer.close(index);

}});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值