zoukankan      html  css  js  c++  java
  • 公共接口限制IP请求次数的一种方式(redis版)

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

    采用了限制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);
    // 后面跟着逻辑就可以了
    // 不管用户请求是否正确,只要请求就记录
    // 超过请求次数直接返回,不请求数据库

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

  • 相关阅读:
    (转)重识new
    【洛谷习题】连续自然数和
    【AHOI2005】约数研究
    【NOIP2003】麦森数
    康托展开
    【洛谷习题】南蛮图腾
    【洛谷习题】吃奶酪
    【NOIP2002】字串变换
    哈希表
    【NOIP2013】货车运输
  • 原文地址:https://www.cnblogs.com/SamNicole1809/p/12718033.html
Copyright © 2011-2022 走看看