1. 程式人生 > >Spring Cloud Zuul結合Smconf配置中心動態進行IP黑名單限制

Spring Cloud Zuul結合Smconf配置中心動態進行IP黑名單限制

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: