跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

如何在 Java 中利用 if 逻辑实现基于 IP 白名单与黑名单的网关访问流程控制

黑名单优先于白名单,即IP若在黑名单中则直接拒绝;其次检查白名单允许访问;最后按默认策略处理。支持CIDR和通配符匹配,需预编译规则并内存缓存以提升性能。 IP 白名单与 黑名单 的基本逻辑关系 网关做访问控制时,白名单和黑名单不是简单叠加,而是有明确优先级:通常黑名单优先于白名单。也就是说,一个 ip 若同时在黑名单中,即使它也在白名单里,也应拒绝访问。这种“黑名单一票否决”设计更符合安全实践。 基础判断结构:用 if 实现三层校验 核心逻辑可拆解为三步:先查黑名单,再查白名单,最后兜底放行或拦截。代码结构清晰、易维护: 第一步(高优) :if (ipInBlacklist(ip)) → 直接 return false(拒绝) 第二步(次优) :else if (ipInWhitelist(ip)) → return true(允许) 第三步(默认) :else → 根据策略决定:return false(默认拒绝)或 return true(默认放行) IP 匹配支持 CIDR 和通配符的实用写法 真实场景中,白/黑名单常含网段(如 192.168.1.0/24 )或模糊格式(如 10.0.*.* )。不建议手写正则解析,推荐用成熟工具类: Eclipse导入Android或其他的JAVA项目的正确方法 WORD版 本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看 下载 用 Apache Commons Net 的
InetAddressUtils.isIPv4Address()
+
SubnetUtils
判断 CIDR 是否包含某 IP 对
192.168.*.*
类型,可转为正则:
"^" + pattern.replace(".", "\.").replace("*", ".*") + "$"
,再用
ip.matches(regex)
注意:匹配前统一做 IP 标准化(如去除前后空格、处理 IPv4 映射 IPv6 地址) 性能与线程安全的关键细节 网关高频调用,需避免每次请求都查数据库或读文件: 白/黑名单数据建议加载到内存(如
ConcurrentHashMap
或 Guava
Cache
),变更时热刷新 若用 List 存 CIDR 规则,匹配时用 预编译 SubnetUtils 实例列表 ,而非每次 new —— 否则 GC 压力大 避免在 if 块中做耗时操作(如远程 HTTP 查询、JDBC 查询),否则拖慢整个请求链路

相关文章