秒杀系统中如何动态生成下单随机URL
来源:互联网 发布:淘宝让上传身份证清关 编辑:程序博客网 时间:2024/04/20 09:30
秒杀系统中通常会避免用户之间访问下单页面的URL(避免使用爬虫来造成不公平)。所有需要将URL动态化,即使秒杀系统的开发人员也无法在知晓在秒杀开始时的URL。解决办法是在获取秒杀URL的接口中,返回一个服务器端生成的随机数,并在下单URL中传递该参数完成下单。
首先构造一个获取下单URL的modle
public class Exposer { //加密措施 private String md5; //其中必要字段,如是否开启秒杀,时间等省}
获取秒杀URL的conntroller:
@RequestMapping(value = "/{goodsId}/getUrl") public Exposer exposer(@PathVariable("goodsId") Long seckillGoodsId) { //goodsId表示是什么商品,然后根据该商品的数据库依次获得尚未被秒杀的每个商品的唯一ID,然后根据商品的唯一ID来生成唯一的秒杀URL seckillGoodsId为某个商品的唯一id其中这一步可以省,之间将goodsId表示的传递给exportSeckillUrl也可以完成 //异常判断省掉,返回上述的model对象。即包含md5的对象 Exposer result =seckillService.exportSeckillUrl(seckillGoodsId); return result; }
Service的方法实现:
//加入一个混淆字符串(秒杀接口)的salt,为了我避免用户猜出我们的md5值,值任意给,越复杂越好private final String salt="12sadasadsafafsafs。/。,";public Exposer exportSeckillUrl(long seckillGoodsId) { //首页根据该seckillGoodsId判断商品是否还存在。 //如果不存在则表示已经被秒杀 String md5 = getMD5(seckillGoodsId); return new Exposer(md5);} private String getMD5(long seckillGoodsId) { //结合秒杀的商品id与混淆字符串生成通过md5加密 String base=seckillGoodsId+"/"+salt; String md5= DigestUtils.md5DigestAsHex(base.getBytes()); return md5; }
用户在获取获取到下单URL的时候,当秒杀开启后则会得到一个md5值。通过该md5值来完成下单具体的秒杀交易:
具体执行秒杀操作的接口
@RequestMapping(value = "/{seckillGoodsId}/{md5}/execution") public Boolean execution(@PathVariable("seckillGoodsId") Long seckillGoodsId,@PathVariable("md5") String md5){ Boolean result = seckillService.executionSeckillId(seckillId,md5); //executionSeckillId的操作是强事务,操作为减库存+增加购买明细,最终返回是否秒杀成功,秒杀成功的商品消息等。这里省,只返回是否接口合理的信息。 return result; }
Service 执行秒杀的过程:
public Boolean executionSeckillId(long seckillID,String md5){ if(md5==null||!md5.equals(getMD5(seckillID))){ //表示接口错误,不会执行秒杀操作 return false; } //接口正确,排队执行秒杀操作。减库存+增加购买明细等信息,这里只返回false return true; }}
0 0
- 秒杀系统中如何动态生成下单随机URL
- Oracle中如何生成随机数字、随机字符串、随机日期
- 按秒生成随机时间
- 秒杀系统设计,高并发下的下单功能设计
- 如何实现“秒杀”系统
- 如何实现“秒杀”系统
- 如何实现“秒杀”系统
- OpenCV中如何生成随机矩阵
- 浏览器客户端智能自动化:如何取得页面中JavaScript运行时动态生成的URL?
- 抢单系统,秒杀发红包系统,秒杀的架构在设计过程中需要考虑到那些问题,需要应用到哪些技术?
- 如何设计一个秒杀系统
- JAVA 如何设计一个秒杀系统
- 如何设计一个秒杀系统
- 秒杀系统 是 如何设计
- 如何设计一个秒杀系统
- 如何设计一个秒杀系统
- 如何设计一个秒杀系统
- 如何设计一个秒杀系统
- TCP三次握手及四次挥手详细图解
- poj 1066 Treasure Hunt (线段相交判定)
- 迷宫day3
- 对汇编语言中负数舍入误差的理解
- Palindrome Partitioning II
- 秒杀系统中如何动态生成下单随机URL
- NoSQL 非关系型数据库简介
- 计算广告系列篇(5)------计费
- 私有云的迁移:从VMware到OpenStack
- static_cast、dynamic_cast、const_cast和reinterpret_cast总结
- 【寒江雪】Direct3D11纹理贴图
- DOS常用命令
- 帝国CMS常用标签
- linux读写mac HFS+