为什么要安全验证?
对于稍微懂一些电脑的人可以通过抓包方式F12获取秒杀的接口地址,如果有些人根据此自己写了一个脚本进行抢购,如果有人根据获取到的接口写了一个抢购的脚本,那么就可以通过不在app界面点击下单按钮就可以下单了,速度比点击下单按钮快得多。所以对于一些用户来说不公平。
安全验证流程?
用户在下单前,先发出一个生成md5hash值的请求,根据自己抢购的商品id和自己的用户Id用Md5加密算法和随机盐生成一个hash值存到redis中,在redis中设置过期时间,等用户真正下单时发起的下单请求(秒杀请求)携带着Md5的hash值和redis中已经存在的hash值作比较是否相等,就能判断此请求是根据脚本发起的请求(没有点击抢购秒杀按钮)还是用户在app下下的单了,避免一些用户的脚本抢购,如果两次md5的值相等,那么就处理下单业务,如果不相等,那么就抛弃请求。
controller.java