前一段时间,公司的短信服务经常收到预警,当时初步猜测我们的短信服务受到了攻击,于是想到了两种实现方案。
方案一:
采用nginx防止DDOS(网上有很多案例可以借鉴)
方案二:
采用Spring Cloud Zuul(网关)层实现防DDOS
因考虑如果使用nginx层进行防DDOS拦截,会导致线上的其他服务受到影响,并且使用nginx拦截无法像Zuul网关那么容易可以自定义修改,所以果断采取方案二,以下是代码片段:
步骤1:获取请求路径(单独对短信发送接口进行拦截),也可最避免其他接口受到影响
HttpServletRequest request = context.getRequest();
// 获取请求路径
String uri = request.getRequestURI();
if (uri != null && uri.contains("sendSms***")){
// 获取请求IP
String reqIpAddress = HttpReqIPUtil.getHttpClientIP(request);
}
步骤2:采用redis进行IP请求判断,达到异常IP封禁的效果
一般而言人在一秒内,请求频次最多大概在3-4下,通过设置ip的失效时间判断1秒内超过5次,将拉入黑名单
String blockIp = this.r