赞
踩
每一次交易生成一次交易码。一次性使用
使用lua脚本防止1key多用 防止黑客并发订单攻击(主要原理:在验证交易码正确的同时,在缓存中删除交易码)
public String checkTradeCode(String memberId, String tradeCode) { Jedis jedis = null; try{ jedis = redisUtil.getJedis(); String tradeKey = "user:"+memberId+":tradeCode"; String tradeCodeFromCache = jedis.get(tradeKey); //多个用户同时提交订单的bug //redis lua脚本防止1key多用 防止黑客并发订单攻击 //对比防重删令牌 String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end"; Long eval = (Long) jedis.eval(script, Collections.singletonList(tradeKey),Collections.singletonList(tradeCode)); if(eval!=null && eval!=0){ //删除缓存里面的交易码 //jedis.del(tradeKey); return "success"; }else{ return "fail"; } }finally { jedis.close(); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。