高性能Java秒杀系统优化(一)--秒杀接口地址隐藏

整理:https://coding.imooc.com/class/168.html#Envir

如何做到秒杀接口地址的隐藏

在秒杀开始之前,秒杀接口地址不要写到客户端,而是在秒杀开始之后,将秒杀地址动态地在客户端和服务器间进行交互完成拼接。这样一来,秒杀开始之前,秒杀地址对客户端不可见。

实现思路:

  • 秒杀开始之前,先去请求接口获取秒杀地址;

  • 接口改造,带上@pathVariable参数;(MD5(UUID))

  • 添加生成地址的接口;

  • 秒杀收到请求,先验证@pathVariable参数。

注意:但是获取秒杀地址这个接口也有可能被恶意刷,可以使用验证码防刷。

用户在提交获取秒杀地址的请求之前,需要将goodsId和verifyCode一同提交到服务端,服务器通过@RequestParam参数获取goodsId和verifyCode,然后检验验证码是否正确,如果正确,则返回秒杀地址给客户端,客户端得到秒杀地址后,拼接秒杀地址然后异步地向这个地址发出请求获取秒杀结果,这样就完成了秒杀接口地址的隐藏。

需要注意的是,这里需要将goodsId和verifyCode一同提交到服务端做校验,如果只提交goodsId,那么客户端仍然可以使用明文的方式获取随机生成的接口秒杀地址,但是,引入了verifyCode后,客户端需要将验证码也一起发送到服务端做验证,验证成功才返回随机生成的秒杀地址,不成功则返回非法请求,通过这样一种双重验证的方式,就可以方式用户使用不合理的手段参与秒杀,引入验证码有效地防止了这一点,因为验证码的输入需要用户真正参与进来。

1、goods_detail.htm 商品详情页

修改“立即秒杀”按钮事件(秒杀时间到,才会显示立即秒杀按钮),先获取秒杀地址,再发起秒杀,后面还会加多校验图形验证码。

高性能Java秒杀系统优化(一)--秒杀接口地址隐藏

 获取秒杀地址的js 方法,verifyCode验证码是下一节才加的。

高性能Java秒杀系统优化(一)--秒杀接口地址隐藏

获取到秒杀地址后,才往下执行真正的秒杀操作,并把path 拼接

高性能Java秒杀系统优化(一)--秒杀接口地址隐藏

2、新增获取秒杀接口地址

高性能Java秒杀系统优化(一)--秒杀接口地址隐藏

通过uuid 生成,并MD5 加密 (可加一个固定或者随机盐值 salt)

并且设置到redis 缓存,key根据用户id和商品id 生成,所以每个用户获取到的秒杀地址不一样

高性能Java秒杀系统优化(一)--秒杀接口地址隐藏

url: /{path}/do_miaosha

通过路径变量path (MD5加密),区别每个用户的秒杀地址

高性能Java秒杀系统优化(一)--秒杀接口地址隐藏

校验秒杀地址:每个用户的秒杀地址变量path与redis缓存中对比

高性能Java秒杀系统优化(一)--秒杀接口地址隐藏

往期推荐

史上最强Tomcat8性能优化

日均5亿查询量的京东到家订单中心,为什么舍MySQL用ES?

四张图带你了解Tomcat系统架构--让面试官颤抖的Tomcat回答系列!

“12306”架构到底有多牛逼--秒杀系统的艺术

阿里巴巴为什么能抗住90秒100亿?--服务端高并发分布式架构演进之路

B2B电商平台--ChinaPay银联电子支付功能

学会Zookeeper分布式锁,让面试官对你刮目相看

SpringCloud电商秒杀微服务-Redisson分布式锁方案

一只 有深度 有灵魂 的公众号0.0高性能Java秒杀系统优化(一)--秒杀接口地址隐藏

高性能Java秒杀系统优化(一)--秒杀接口地址隐藏