谈谈ip地址拦截和接口重复请求控制

一、接口重复请求拦截:

      1.1、 顾名思义就是拦截当前接口不能在规定的时间内,多次请求进来。

       1.2、而有人问:那不同的用户请求同一个接口,也要给别的用户给拦截掉吗?

                  答: 这是不可能的,那要这么解决呢,我们可以给每条进来的数据,都加上用户各自的唯一标示就可以解决不同的用户拦截了,进一步详细拦截,可以加上请求参数拦截。

       1.3、实现思路:

                    redis + mysql 控制拦截

二、ip地址拦截:

        2.1、获取用户请求进来的真实ip地址跟要拦截的ip集合对比,比对成功,拦截在服务器外面。

        2.2、实现思路:

                 mysql

三、数据库设计:

接口地址拦截表:

CREATE TABLE `intercept_address` (
  `id` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL COMMENT '需要拦截的访问地址',
  `time` bigint(26) DEFAULT NULL COMMENT '限制接口重复请求时间:单位为秒,为null时,不做限制',
  `remark` varchar(124) DEFAULT NULL COMMENT '备注',
  `create_time` datetime DEFAULT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ip拦截表:

CREATE TABLE `intercept_whitelists` (
  `id` varchar(255) NOT NULL,
  `ip_address` varchar(46) NOT NULL COMMENT '拦截的ip地址',
  `remark` varchar(124) DEFAULT NULL COMMENT '备注',
  `create_time` datetime DEFAULT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

intercept_address 表字段解释

       address:接口地址

       time:接口重复请求时间限制,为空时,说明不需要重复拦截功能

intercept_whitelists 表,需要配合intercept_address 表,一起使用。

代码实现:

   新建一个拦截类,继承 HandlerInterceptorAdapter 拦截类

import com.alibaba.fastjson.JSON;
import com.szhg.engineering.entity.InterceptAddress;
import com.szhg.engineering.enums.ReturnCodeEnum;
import com.szhg.engineering.server.InterceptAddressServer;
import com.szhg.engineering.server.InterceptWhitelistsServer;
import com.szhg.engineering.utils.RequestUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * 拦截器实现类
 * @Date: 2020/4/24 15:50
 */
@Slf4j
public class RequestInterceptor extends HandlerInterceptorAdapter {

    @Autowired
    private InterceptWhitelistsServer interceptWhitelistsServer;
    @Autowired
    private InterceptAddressServer interceptAddressServer;

    /**
     * 在方法被调用前执行在该方法中可以做类似校验的功能。如果返回true,则继续调用下一个拦截器。如果返回false,则中断执行,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值