在Netty中支持https服务器

@Override
public void run() {
	// 端口是否已经被占用
	if (!NetUtil.localPortAbled(port)) {
		LOG.error("LoginServer端口[{}]已被占用", port);
		System.exit(0);
	}

	try {
		ServerBootstrap b = new ServerBootstrap().option(ChannelOption.SO_BACKLOG, 1024);
		b.group(accepterGroup, workGroup).childHandler(new ChannelInitializer<SocketChannel>() {
			@Override
			protected void initChannel(SocketChannel ch) throws Exception {
				ChannelPipeline pipeline = ch.pipeline();
				// =====================以下为SSL处理代码=================================
				LOG.error("开始设置https服务");
				SSLContext sslcontext = SSLContext.getInstance("TLS");
				KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
				KeyStore ks = KeyStore.getInstance("PKCS12");
				String keyStorePath = "config/dsmy.pfx";
				String keyPassword = "dsmy@123456$";
				ks.load(new FileInputStream(keyStorePath), keyPassword.toCharArray());
				kmf.init(ks, keyPassword.toCharArray());
				sslcontext.init(kmf.getKeyManagers(), null, null);
				SSLEngine engine = sslcontext.createSSLEngine();
				engine.setUseClientMode(false);
				engine.setNeedClientAuth(false);
				pipeline.addFirst("ssl", new SslHandler(engine));
				// =====================以上为SSL处理代码=================================
				pipeline.addLast(new HttpServerCodec());
				pipeline.addLast(new HttpObjectAggregator(65536));
				pipeline.addLast(new HttpContentCompressor(1));
				pipeline.addLast(handler);
			}
		}).channel(NioServerSocketChannel.class);

		Channel ch = b.bind(port).sync().channel();
		LOG.info("监听Http端口[{}]成功", port);
		ch.closeFuture().sync();
	} catch (Exception e) {
		LOG.error("HttpServer启动异常", e);
		System.exit(1);
	} finally {
		accepterGroup.shutdownGracefully();
		workGroup.shutdownGracefully();
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值