安全优化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jcsyl_mshot/article/details/81176025

1.秒杀接口地址隐藏

在商品详情页请求秒杀开始之前,先去请求接口获取秒杀地址
1.秒杀接口改造,带上pathvariable 参数,以便秒杀时候进行验证
2.新增生成地址的接口,将秒杀地址存放到redis 数据库中(key 为用户名组合商品名)

2.数学公式验证

防止机器人,分散用户请求
1.添加生成验证码的接口
2.在获取秒路径时候,对验证码进行验证
3.ScrptEngine 使用

实现逻辑:
1.在商品详情页进行添加验证码,页面判断商品是否处于秒杀状态,如果处于秒杀状态,自动调用通过生成验证码接口生成 验证码图片返回【bufferedImage 对象,其中画笔生成干扰点和数字公式】,同时通过ScrptEngine 计算结果存放到redis 里面。

2.在点击图片时候重新调用生成验证码接口重新生成数字。在结束时候关闭验证码等显示。

3.用户执行秒杀操作时候,生成秒杀路径,并且写入到我们的redis 中。生成秒杀路径的前提通过验证码。

4.通过秒杀路径判断后通过 ajax 进行秒杀立即返回结果,请求入队或则秒杀失败。

5.秒杀操作成功后(消息接收者进行秒杀操作) 通过ajax 客户端轮询结果。此时有三种可能,生成对应秒杀订单(秒杀成功),商品数量为0(秒杀失败),另一种情况代码接收者还未处理请求。

注意:验证码在redis 只保存一个,秒杀路径每点一次都会不同。

3.接口防刷

接口一分钟之前限制访问次数
在对生成秒杀路径该接口进行防刷限流可以通过redis缓存实现,key 为用户名+路径名 用户每访问一次,对应的value 加一,当value 大于某一个值时候,返回访问频繁。

通过拦截器实现接口防刷功能的通用。定义一个注解,通过自己实现的拦截器(分别实现预处理、后处理(调用了Service并返回ModelAndView,但未进行页面渲染)、返回处理(已经渲染了页面))并且可以细粒度获取方法上面的注解,以及获取注解中属性值 进行处理,最后注入到WebMvcConfigurerAdapter 。因此我们只需要防刷的接口上添加一个注解。

猜你喜欢

转载自blog.csdn.net/jcsyl_mshot/article/details/81176025