本文分享一下如何实现流量拦截
首先,流量拦截是要在某一段时间内控制访问次数,如果访问次数超过阈值,则拒绝访问。
所以,要有两个配置化信息,一个是流量监控缓存失效时间内可以调用的次数,一个是流量监控缓存失效时间
实现方式是使用Redis缓存记录调用次数和拦截器用来拦截http请求调用。
@Service
public class RateLimitInterceptor extends HandlerInterceptorAdapter {//继承拦截器的适配器类HandlerInterceptorAdapter
private static final Logger LOGGER = LoggerFactory.getLogger(RateLimitInterceptor.class);
private String rateControlFlag = "0";//是否开启流量控制
private Long lastLoadCacheTime = System.currentTimeMillis();
@Autowired
private RateLimitService rateLimitService;
/**
* 流量控制检查入口
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
//根据服务器状态或请求用户的限制策略来进行控制
// this is where magic happens
super.preHandle(request, response, handler);
//暂定userKey用请求方地址,可能对方是局域网。。
String userKey = request.