同一个 IP 只能有一个连接,逻辑在 UniqueIpFilter 中实现,其也是个 handler,用的时候安装到 pipeline 上就行了;
IP 地址过滤:黑名单、白名单,逻辑在 RuleBasedIpFilter 和 IpSubnetFilterRule 中实现;
示例:使用黑名单增强安全
定义黑名单的规则,其实给出的是一个 IP 和 CIDR,根据这两个值算出网络号;
然后比较 Client 的 IP 的网络号和规则中计算出的网络号是否相等,如果相等,说明 Client 的 IP 是在黑名单中(当 IpSubnetFilterRule 的 IpFilterRuleType 是 REJECT 的情况下),断开连接;
代码片段如下:
// IpSubnetFilterRule 规则判断的是 Client 的 IP 和规则中的 IP 是否在同一个局域网中,规则定义如下:
// 如果和规则定义的 IP 在同一个局域网中,就断开连接;
// 如果和规则定义的 IP 不在同一个局域网中,就放过,什么都不做;
// 这个规则其实就是个黑名单
final IpSubnetFilterRule ipSubnetFilterRule
= new IpSubnetFilterRule("127.0.0.1", 8, IpFilterRuleType.REJECT);
final RuleBasedIpFilter ruleBasedIpFilter = new RuleBasedIpFilter(ipSubnetFilterRule);
// 黑名单 handler
pipeline.addLast("ipFilter", ruleBasedIpFilter);