Netty白名单配置

在服务端初始化的时候进行白名单的配置

@Component
public class SocketServerInitializer extends ChannelInitializer<SocketChannel> {

    @Override
    protected void initChannel(SocketChannel socketChannel) throws Exception {
        //ip白名单
        IpSubnetFilterRule rule = new IpSubnetFilterRule("132.122.233.156", 32 , IpFilterRuleType.ACCEPT);
        IpSubnetFilterRule rule1 = new IpSubnetFilterRule("127.0.0.1", 32 , IpFilterRuleType.ACCEPT);

        IpFilterRule rejectAll = new IpFilterRule() {
            @Override
            public boolean matches(InetSocketAddress inetSocketAddress) {
                return true;
            }

            @Override
            public IpFilterRuleType ruleType() {
                return IpFilterRuleType.REJECT;
            }
        };
        RuleBasedIpFilter ipFilter = new RuleBasedIpFilter(rule1,rule,rejectAll);
        ChannelPipeline pipeline = socketChannel.pipeline();
        pipeline.addLast(new ObjectDecoder(10 * 1024 * 1024, ClassResolvers.weakCachingConcurrentResolver(this.getClass().getClassLoader())));
        pipeline.addLast(new ObjectEncoder());
        //心跳检测设置
        pipeline.addLast(new IdleStateHandler(60,0,0, TimeUnit.SECONDS));
        pipeline.addLast(new SocketServerHandler());
        //同一个Ip只能有一个连接
        pipeline.addLast(new UniqueIpFilter());
        //ip白名单
        pipeline.addLast("ipFilter",ipFilter);
    }
}

因为写在代码里后续维护不方便,然后我就放配置文件

@Component
public class SocketServerInitializer extends ChannelInitializer<SocketChannel> {

    @Value("${netty.whiteList}")
    private String whiteList;

    @Override
    protected void initChannel(SocketChannel socketChannel) throws Exception {
        //ip白名单
        IpFilterRule rejectAll = new IpFilterRule() {
            @Override
            public boolean matches(InetSocketAddress inetSocketAddress) {
                String ip = inetSocketAddress.getHostString();
                return !whiteList.contains(ip);
            }
            @Override
            public IpFilterRuleType ruleType() {
                return IpFilterRuleType.REJECT;
            }
        };
        RuleBasedIpFilter ipFilter = new RuleBasedIpFilter(rejectAll);
        ChannelPipeline pipeline = socketChannel.pipeline();
        pipeline.addLast(new ObjectDecoder(10 * 1024 * 1024, ClassResolvers.weakCachingConcurrentResolver(this.getClass().getClassLoader())));
        pipeline.addLast(new ObjectEncoder());
        //心跳检测设置
        pipeline.addLast(new IdleStateHandler(60,0,0, TimeUnit.SECONDS));
        pipeline.addLast(new SocketServerHandler());
        //同一个Ip只能有一个连接
        pipeline.addLast(new UniqueIpFilter());
        //ip白名单
        pipeline.addLast("ipFilter",ipFilter);
    }
}

通过注解@RefreshScope可以动态刷新

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

折戏花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值