如何拒绝Netty中的传入连接?

pro*_*ron 2 java netty

我有一个Netty TCP服务器,我想有选择地拒绝/拒绝传入连接尝试(基于他们的远程地址).我想我必须使用ServerBootstrap.setParentHandler(ChannelHandler),但我该怎么做ChannelHandler?我处理什么事?我该如何拒绝连接?

Jes*_*jan 6

正如Norman所说,没有办法拒绝连接,但你可以通过将Netty的IpFilterHandler作为第一个处理程序添加到服务器管道来立即关闭它.它也将停止传播用于过滤连接的上游信道状态事件.

@ChannelHandler.Sharable
public class MyFilterHandler extends IpFilteringHandlerImpl {
  private final Set<InetSocketAddress> deniedRemoteAddress;

  public MyFilterHandler(Set<InetSocketAddress> deniedRemoteAddress) {
    this.deniedRemoteAddress = deniedRemoteAddress;
  }

  @Override
  protected boolean accept(ChannelHandlerContext ctx, ChannelEvent e, InetSocketAddress inetSocketAddress) throws Exception {
    return !deniedRemoteAddress.contains(inetSocketAddress);
  }
}
Run Code Online (Sandbox Code Playgroud)

如果你有要阻止的IP地址模式列表,你可以使用IpFilterRuleHandler,

//Example: allow only localhost:
new IPFilterRuleHandler().addAll(new IpFilterRuleList("+n:localhost, -n:*"))
Run Code Online (Sandbox Code Playgroud)