java中一个账号如何多次请求?详细解析

BSO 2020-09-28 16:33:01 java常见问答 7879

随着科学技术的不断进步,java的学习也日常广泛起来。在我们的生活当中,当秒杀或者抢购时就可以用到java,这其实是一种投巧的手段。今天就为大家介绍一下java中一个账号如何多次请求?一起来看看吧。

为大家描述一下如何用同一个账号,一次性发出多个请求。

部分用户通过浏览器的插件或者其他工具,在秒杀开始的时间里,以自己的账号,一次发送上百甚至更多的请求。实际上,这样的用户破坏了秒杀和抢购的公平性。

这种请求在某些没有做数据安全处理的系统里,也可能造成另外一种破坏,导致某些判断条件被绕过。

例如一个简单的领取逻辑,先判断用户是否有参与记录,如果没有则领取成功,最后写入到参与记录中。

这是个非常简单的逻辑,但是,在高并发的场景下,存在深深的漏洞。多个并发请求通过负载均衡服务器,分配到内网的多台Web服务器,它们首先向存储发送查询请求,然后,在某个请求成功写入参与记录的时间差内,其他的请求获查询到的结果都是“没有参与记录”。这里,就存在逻辑判断被绕过的风险。

再说一下解决的方案:

在程序入口处,一个账号只允许接受1个请求,其他请求过滤。

不仅解决了同一个账号,发送N个请求的问题,还保证了后续的逻辑流程的安全。实现方案,可以通过redis这种内存缓存服务,写入一个标志位(只允许1个请求写成功,结合watch的乐观锁的特性),成功写入的则可以继续参加。

或者,自己实现一个服务,将同一个账号的请求放入一个队列中,处理完一个,再处理下一个。

以上就是关于java中一个账号如何多次请求的详细解析了。其实在我们生活中经常可以看到这种操作,比如黄牛抢票其实就是这个原理,这也就是我们普通人抢不过黄牛的原因了。想要了解更多java基础,敬请关注奇Q工具网。

推荐阅读:

在java中并发部分API包含哪些内容?实际代码展示

java队列处理高并发怎么实现?

java多线程与高并发怎么一起实现?