(1)キーコード
パッケージのテスト; 輸入java.security.cert.CertificateException。 輸入javax.net.ssl.SSLException。 輸入io.netty.bootstrap.ServerBootstrap; 輸入io.netty.channel.ChannelFuture; 輸入io.netty.channel.ChannelOption。 輸入io.netty.channel.EventLoopGroup; 輸入io.netty.channel.nio.NioEventLoopGroup; 輸入io.netty.channel.socket.nio.NioServerSocketChannel。 輸入io.netty.handler.ssl.SslContext; 輸入io.netty.handler.ssl.SslContextBuilder; 輸入io.netty.handler.ssl.util.SelfSignedCertificate; パブリック クラスProxyServer { 公共 静的 ボイドメイン(文字列[]引数)がスローInterruptedExceptionある、CertificateException、SSLExceptionを{ ブール SSL = 偽。// はSystem.getProperty( "SSL")!= NULL; int型 PORT = Integer.parseInt(はSystem.getProperty( "ポート"を、SSL "5688"?: "8080" )); 最終SSLContextのsslCtx。 もし(SSL){ 自己署名証明書のSSC = 新たな自己署名証明書()。 sslCtx = SslContextBuilder.forServer(ssc.certificate()、ssc.privateKey())()を構築します。 }他{ sslCtx = NULL ; } EventLoopGroup bossGroup = 新しいNioEventLoopGroup()。 EventLoopGroup WORKGROUP = 新しいNioEventLoopGroup(); 試す{ ServerBootstrapのB = 新しいServerBootstrap()。 b.group(bossGroup、ワークグループ).channel(NioServerSocketChannel。クラス).OPTION(ChannelOption.SO_BACKLOG、128 ) .childOption(ChannelOption.SO_KEEPALIVE、真).OPTION(ChannelOption.CONNECT_TIMEOUT_MILLIS、6000 ) .childHandler(新しいProxyServiceInit(sslCtx)); ChannelFutureのF = b.bind(PORT).sync(); System.out.println( "端口号:" + PORT)。 。f.channel()closeFuture()同期()。 } 最後に{ workGroup.shutdownGracefully()。 bossGroup.shutdownGracefully(); } } }
パッケージのテスト; 輸入io.netty.channel.Channel。 輸入io.netty.channel.ChannelInitializer; 輸入io.netty.channel.ChannelPipeline; 輸入io.netty.handler.codec.http.HttpServerCodec; 輸入io.netty.handler.ssl.SslContext; パブリック クラス ProxyServiceInitは拡張 ChannelInitializer <チャンネル> { 民間 最終SSLContextのsslCtxを。 公共ProxyServiceInit(SSLContextのsslCtx){ この .sslCtx = sslCtx。 } @Overrideは 保護され 、ボイドinitChannel(チャンネルチャネル)がスロー{例外 ChannelPipeline P = channel.pipeline()。 System.out.println( "ProxyServiceInit" ); もし(!sslCtx = NULL ){ p.addLast(sslCtx.newHandler(channel.alloc()))。 } p.addLast( "httpcode"、新HttpServerCodec())。 p.addLast( "HTTPServiceの"、新しいHTTPServiceの()); } }
パッケージのテスト; 輸入java.security.cert.CertificateException。 輸入javax.net.ssl.SSLException。 輸入io.netty.bootstrap.ServerBootstrap; 輸入io.netty.channel.ChannelFuture; 輸入io.netty.channel.ChannelOption。 輸入io.netty.channel.EventLoopGroup; 輸入io.netty.channel.nio.NioEventLoopGroup; 輸入io.netty.channel.socket.nio.NioServerSocketChannel。 輸入io.netty.handler.ssl.SslContext; 輸入io.netty.handler.ssl.SslContextBuilder; 輸入io.netty.handler.ssl.util.SelfSignedCertificate; パブリック クラスProxyServer { 公共 静的 ボイドメイン(文字列[]引数)がスローInterruptedExceptionある、CertificateException、SSLExceptionを{ ブール SSL = 偽。// はSystem.getProperty( "SSL")!= NULL; int型 PORT = Integer.parseInt(はSystem.getProperty( "ポート"を、SSL "5688"?: "8080" )); 最終SSLContextのsslCtx。 もし(SSL){ 自己署名証明書のSSC = 新たな自己署名証明書()。 sslCtx = SslContextBuilder.forServer(ssc.certificate()、ssc.privateKey())()を構築します。 }他{ sslCtx = NULL ; } EventLoopGroup bossGroup = 新しいNioEventLoopGroup()。 EventLoopGroup WORKGROUP = 新しいNioEventLoopGroup(); 試す{ ServerBootstrapのB = 新しいServerBootstrap()。 b.group(bossGroup、ワークグループ).channel(NioServerSocketChannel。クラス).OPTION(ChannelOption.SO_BACKLOG、128 ) .childOption(ChannelOption.SO_KEEPALIVE、真).OPTION(ChannelOption.CONNECT_TIMEOUT_MILLIS、6000 ) .childHandler(新しいProxyServiceInit(sslCtx)); ChannelFutureのF = b.bind(PORT).sync(); System.out.println( "端口号:" + PORT)。 。f.channel()closeFuture()同期()。 } 最後に{ workGroup.shutdownGracefully()。 bossGroup.shutdownGracefully(); } } }