@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();
}
}