Spring Cloud Zuul結合Smconf配置中心動態進行IP黑名單限制
阿新 • • 發佈:2019-01-28
API閘道器中最常見的一個功能就是防止爬蟲,當然防止爬蟲的前提是先得識別出這個請求是爬蟲
這部分我們不涉及,假設我們已經能夠識別出爬蟲的請求了,那麼怎麼限制呢?
最常見的就是根據IP限制,某個IP大量訪問就比較異常了
這篇主要介紹下如何對IP進行禁用操作
定義一個配置類用來儲存IP黑名單資訊
/**
* 基礎配置資訊
*
* @author yinjihuan
* @create 2017-11-15 17:06
**/
@CxytianDiConf(system = "fangjia-fsh-api")
public class BasicConf {
@ConfField ("IP黑名單,多個用逗號分隔")
private String ipStr = "default";
public String getIpStr() {
return ipStr;
}
public void setIpStr(String ipStr) {
this.ipStr = ipStr;
}
}
建一個Zuul的Filter,用來過濾黑名單中存在的IP, 這邊直接可以在過濾器中使用配置資訊
@Autowired
private BasicConf basicConf;
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
String ip = IpUtils.getIpAddr(ctx.getRequest());
// 在黑名單中禁用
if (StringUtils.isNotBlank(ip) && basicConf != null && basicConf.getIpStr().contains(ip)) {
ctx.set("isSuccess", false);
ctx.setSendZuulResponse(false );
ResponseData data = ResponseData.fail("非法請求", ResponseCode.NO_AUTH_CODE.getCode());
ctx.setResponseBody(JsonUtils.toJson(data));
ctx.getResponse().setContentType("application/json; charset=utf-8");
return null;
}
return null;
}
在每個請求過來的時候都會去判斷這個IP是否在黑名單中是否存在,如果存在則不進行轉發操作,直接回復內容給客戶端
我們假設判斷是否為爬蟲的程式已經好了,並且能夠識別出爬蟲的IP,識別出之後就將IP資訊加入到配置中心即可,這邊會實時更新配置中心的資訊,來做限制
具體程式碼可以參考我的github: