Netty 中的 “cidrPrefix” 是什么?
用 CIDR 的方式表示一个 IP,比如:192.168.31.100/24,其中 24 就是 Netty 中的 cidrPrefix;
Netty 地址过滤的功能
- 同一个 IP 只能有一个连接,逻辑在 UniqueIpFilter 中实现,其也是个 handler,用的时候安装到 pipeline 上就行了;全局共享handler
- IP 地址过滤:黑名单、白名单,逻辑在 RuleBasedIpFilter 和 IpSubnetFilterRule 中实现;
**RuleBasedIpFilter **
RuleBasedIpFilter是基于ip的过滤器,可以自定义哪些ip或者ip范围允许通过或者被阻止。因为默认情况下,如果不添加任何IpSubnetFilterRule, RuleBasedIpFilter就会允许所有ip。如果我们使用白名单机制,要么继承RuleBasedIpFilter类,重写accept方法,要不在RuleBasedIpFilter, 添加一个rejectAll,并将该rejectAll放在数组的最后。
// IpSubnetFilterRule 规则判断的是 Client 的 IP 和规则中的 IP 是否在同一个局域网中,规则定义如下:
// 如果和规则定义的 IP 在同一个局域网中,就断开连接;
// 如果和规则定义的 IP 不在同一个局域网中,就放过,什么都不做;
final IpSubnetFilterRule ipSubnetFilterRule
= new IpSubnetFilterRule("127.0.0.1", 8, IpFilterRuleType.REJECT);
final RuleBasedIpFilter ruleBasedIpFilter = new RuleBasedIpFilter(ipSubnetFilterRule);