首页 > 其他 > 详细

公共接口限制IP请求次数的一种方式(redis版)

时间:2020-04-17 11:20:22      阅读:92      评论:0      收藏:0      [点我收藏+]

项目中遇到一种情况:前端有一个对外接口,可将用户交互信息保存到数据库,这个接口没有访问限制,有恶意攻击的风险。

采用了限制IP请求次数的方式,示例如下:

// 通过HttpServletRequest获取ip地址
String ip = request.getRemoteAddr();
// 制定redis的key
String key = "USER_IP:" + ip;
// 获取key对应的value
Object hmCount = redisTemplate.opsForValue().get(key);
// 存在就判断是否大于10次
if (hmCount != null) {
    int count = Integer.parseInt(hmCount.toString());
    if (count >= 10) {
        return message.error200();
    }
// 不存在就添加一个,设置有效期为1天
} else {
    redisTemplate.opsForValue().set(key, 0);
    redisTemplate.expire(key, 60 * 60 * 24L, TimeUnit.SECONDS);
}
// 计数加1
redisTemplate.opsForValue().increment(key, 1);
// 后面跟着逻辑就可以了
// 不管用户请求是否正确,只要请求就记录
// 超过请求次数直接返回,不请求数据库

这只是一个简单的思路,欢迎交流指导,相互学习

公共接口限制IP请求次数的一种方式(redis版)

原文:https://www.cnblogs.com/SamNicole1809/p/12718033.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!