管理后台添加了 IP 归属地拦截

在使用 IP 归属地这么长时间,我发现这个作用越来越大了。今天将源文件重新维护了下,主要是规范省份名称,例如河南调整为河南省,内蒙古调整为内蒙古自治区等,调整之后,源文件明显增大了尺寸,但是为了严谨,是值得的。

因为我的后台,访问地点是固定的,通过白名单设置 IP 太麻烦,就用 IP 归属地进行拦截。

我精确到省份,其实可以精确到市,我的 IP 库精确到市。

添加还是非常简单的,利用开放接口即可。

我这里不用使用,可以直接调用函数,如果是两个服务,就需要开放接口了。

先获取归属地,归属地格式,国家|省份|城市,国外的只显示国家名,其它项为 0,返回字符串,以|分割。

取到归属地字符串后,切分字符串为数组,取出省份。

strArr := strings.Split(str, "|")
n := len(strArr)
// 这个情况基本不存在,源文件中以0作为占位符。
if n != 3 {
	return ""
}

return strArr[1]

归属地数组索引 0 是国家,1 是省份,2 是城市。

现在,使用获取到的省份信息比对。

以前,是直接将省份字段和“河南”比较,现在优化了一下,包含就可以。防止数据文件出现河南省这样的情况导致问题。

ok := strings.Contains(province, "河南")
if !ok {
	c.JSON(http.StatusOK, ErrWxResp("拒绝登录-1", nil))
	return
}

这样,归属地不是河南将不允许登录。