使用Netty 4.1.23版本需要用到白名单机制,发现网上很多资料都是介绍IpFilterRuleHandler,仔细一看4.x版本中找不到这个,而5.x又不被推荐使用,因此仔细查看官方4.x文档发现有个RuleBasedIpFilter可以使用。

RuleBasedIpFilter简介

RuleBasedIpFilter是基于ip的过滤器,可以自定义哪些ip或者ip范围允许通过或者被阻止。因为默认情况下,如果不添加任何IpSubnetFilterRule, RuleBasedIpFilter就会允许所有ip。如果我们使用白名单机制,要么继承RuleBasedIpFilter类,重写accept方法,要不在RuleBasedIpFilter, 添加一个rejectAll,并将该rejectAll放在数组的最后。

public class RuleBasedIpFilter extends AbstractRemoteAddressFilter<InetSocketAddress> {private final IpFilterRule[] rules;public RuleBasedIpFilter(IpFilterRule... rules) {if (rules == null) {throw new NullPointerException("rules");} else {this.rules = rules;}}protected boolean accept(ChannelHandlerContext ctx, InetSocketAddress remoteAddress) throws Exception {IpFilterRule[] var3 = this.rules;int var4 = var3.length;for(int var5 = 0; var5 < var4; ++var5) {IpFilterRule rule = var3[var5];if (rule == null) {break;}if (rule.matches(remoteAddress)) {return rule.ruleType() == IpFilterRuleType.ACCEPT;}}return true;}
}

示例

示例比较简单,启动一个server,使用StringDecoder和StringEncoder。

public class NettyServer {public void bind() throws Exception {EventLoopGroup bossGroup = new NioEventLoopGroup();EventLoopGroup workerGroup = new NioEventLoopGroup();ServerBootstrap b = new ServerBootstrap();b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG, 100).handler(new LoggingHandler(LogLevel.INFO)).childHandler(new ChannelInitializer<SocketChannel>() {@Overridepublic void initChannel(SocketChannel ch)throws IOException {IpSubnetFilterRule rule1 = new IpSubnetFilterRule("192.168.119.1", 24, IpFilterRuleType.ACCEPT);IpSubnetFilterRule rule2 = new IpSubnetFilterRule("127.0.0.1", 32, IpFilterRuleType.REJECT);IpFilterRule rejectAll = new IpFilterRule() {@Overridepublic boolean matches(InetSocketAddress remoteAddress) {return true;}@Overridepublic IpFilterRuleType ruleType() {return IpFilterRuleType.REJECT;}};RuleBasedIpFilter filter = new RuleBasedIpFilter(rule1, rejectAll );ch.pipeline().addLast("ipFilter", filter);ch.pipeline().addLast("encoder", new StringEncoder());ch.pipeline().addLast("decoder", new StringDecoder());ch.pipeline().addLast(new StringHandler());}});//我本机有多个ip,启动时不绑定特定ip, 这样才能方便白名单测试b.bind(NettyConstant.PORT).sync();System.out.println("Netty server start successfully: " + (NettyConstant.PORT));}public static void main(String[] args) throws Exception {new NettyServer().bind();}
}

测试

使用telnet 127.0.0.1 8080 会被自动断开
使用telnet 192.168.119.1 8080 可以正确连接上(我机器的ip是192.168.119.1,白名单允许192.168.119.x连接,但是不允许127.0.0.1连接).

读者需要更新允许的ip, 因为我本机是192.168.119.1,所以允许192.168.119.x, 如果你的ip不是这个范围,需要修改代码,否则就不能连接上8080.

Netty中基于ip的白名单或者黑名单机制示例相关推荐

  1. java ip 白名单_Java代码中对IP进行白名单验证

    public classipUtil {//IP的正则,这个正则不能验证第一组数字为0的情况//private static Pattern pattern = Pattern//.compile(& ...

  2. HDFS白名单和黑名单机制

    白名单 允许哪些机器可以加入到当前的HDFS集群中. 通过在hdfs-site.xml中配置dfs.hosts参数来指定白名单,dfs.hosts默认值为空,表示所有机器都可以加入集群中. 白名单配置 ...

  3. SpamAssassin白名单和黑名单选项

    白名单和黑名单选项 whitelist_from 邮件地址 它用于指定通常被误判为发送的垃圾邮件的发信地址. 并不推荐使用这个选项,垃圾邮件或钓鱼邮件的发送者非常简单的就可以制造一些让它盲目信任的邮件 ...

  4. 配置MySQL单个用户多个IP段白名单

    配置多个IP段白名单 用户为testuser,配置100.%.%.%,192.%.%.%,127.%.%.%三个ip段可访问. 因为数据库通过了本地nginx使用127.0.0.1:3306做过反向代 ...

  5. linux添加ip白名单_centOS7 下利用iptables配置IP地址白名单的方法

    编辑iptables配置文件,将文件内容更改为如下,则具备了ip地址白名单功能 #vim /etc/sysconfig/iptables *filter :INPUT ACCEPT [0:0] :FO ...

  6. iptables添加IP段白名单

    背景 要求指定的IP段才能访问主机的 3306 端口 安装iptables yum install -y iptables-services systemctl enable iptables ser ...

  7. sshd服务的白名单与黑名单

    文章目录 起因 过程 总结 起因 在公司进行整理服务器列表时,发现一个问题,有些服务器是ping不通的: 有些服务器可以ping通,但是ssh是没法远程的: 但是他们都可以在jumpserver上进行 ...

  8. hadoop集群的白名单和黑名单示例说明

    白名单示例说明: 说明 添加到白名单的主机节点,都允许访问NameNode,不在白名单的主机节点,都会被退出. web浏览器查看添加白名单前: 配置白名单的具体步骤如下: (1)在NameNode的/ ...

  9. 微信小程序登录-利用Oenid实现白名单和黑名单

    微信小程序登录-利用Oenid实现白名单和黑名单 1.通过获取openid 存储到数据库中 2.结合数据库中额用户资料实现白名单和黑名单.

最新文章

  1. ​Highmaps网页图表教程之绘图区显示标签显示数据标签定位
  2. 动手学深度学习打卡之二。
  3. java内存管理课程设计_Java内存管理分析
  4. java new对象 =null_在Java中将对象分配为null会影响垃圾回收吗?
  5. reload maven project' has encountered a proble 问题
  6. Settings点击Location(位置)后右上角的开关button不会消失
  7. HDFView打开.h5文件时报错Failed to open file
  8. 【读书笔记】《认知语义学》序言
  9. Apache Tomcat AJP 文件包含漏洞复现(CVE-2020-10487)
  10. 判断输入是否为元音字母
  11. 太上老君的炼丹炉之分布式 Quorum NWR
  12. 如何查找计算机中的视频文件,win7系统快速搜索查找电脑里的视频文件的操作方法...
  13. wlh机器人_恐怖谷理论:人类对仿真机器人的天生恐惧
  14. 我就喜欢那种认认真真和我吵架的
  15. pat甲级1013图柳神代码解析自学复盘
  16. VMware 安装Linux centOS 8
  17. 浪潮5280m4导轨安装_NF5280M4 – 导轨安装
  18. JSS-22 DC220V【时间继电器】
  19. BigPatent文本摘要数据集
  20. python 写文件 不存在创建_Python3基础 文件write 与 open(w) 对一个不存在的txt进行创建与写入...

热门文章

  1. 60个漂亮的句子,句句经典
  2. 为什么BEV感知如此重要?下一代目标感知范式不能再错过了
  3. vue 引入外部字体(以思源为例)
  4. 远离负能量,才能获得正能量
  5. win10搜索框怎么关闭_Win10自带杀毒软件究竟好不好?如果不需要怎么去关闭它?...
  6. 主板常见故障处理全攻略
  7. [DOS批处理] 自动备份
  8. Mac必备技巧:Excel不可错过的几个快捷键
  9. Json字符串转成对象
  10. html怎么上传qq空间,手机上传视频到qq空间