版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011342403/article/details/83352819
SSLContextFactory
public class SSLContextFactory {
public static SSLContext getSslContext() throws Exception {
char[] passArray = "zhuofansoft".toCharArray();
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
KeyStore ks = KeyStore.getInstance("JKS");
//鍔犺浇keytool 鐢熸垚鐨勬枃浠�
FileInputStream inputStream = new FileInputStream("D://server.keystore");
ks.load(inputStream, passArray);
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, passArray);
sslContext.init(kmf.getKeyManagers(), null, null);
inputStream.close();
return sslContext;
}
}
处理类
public class HttpsSeverHandler extends ChannelInboundHandlerAdapter {
private static final Logger LOGGER = LoggerFactory.getLogger(HttpServerHandler.class);
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
if (msg instanceof HttpRequest) {
HttpRequest request = (HttpRequest) msg;
LOGGER.info("access messageReceived invoke success..");
Long startTime = System.currentTimeMillis();
// 400
if (!request.decoderResult().isSuccess()) {
sendError(ctx, HttpResponseStatus.BAD_REQUEST);
return;
}
// 405
if (request.method() != GET) {
sendError(ctx, HttpResponseStatus.METHOD_NOT_ALLOWED);
return;
}
FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, HttpResponseStatus.OK);
Map<String, String> parmMap = new RequestParser((FullHttpRequest) request).parse();
//jQuery跨域携带标识符
String callback = parmMap.get("callback");
LOGGER.info("connection jsonp header:[{}],request param:[{}]",callback,parmMap.get("requestParam"));;
//请求参数
DeviceRequest deviceRequest = JSONObject.parseObject(parmMap.get("requestParam"), DeviceRequest.class);
DeviceResultWapper<?> result = getClientResponse(deviceRequest);
LOGGER.info("get client response success.. response:[{}]",JSONObject.toJSONString(result));
LOGGER.info("get client response take time:[{}]",(System.currentTimeMillis()-startTime)/1000+"s");
String content = callback + "("+JSONObject.toJSONString(result)+")";
byte[] bs = content.getBytes("UTF-8");
response.headers().set(CONTENT_TYPE, "text/html; charset=UTF-8");
response.headers().set(HttpHeaderNames.CONTENT_LENGTH, String.valueOf(bs.length));
response.content().writeBytes(ByteBuffer.wrap(bs));
ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE);
/* HttpRequest request = (HttpRequest) msg;
boolean keepaLive = HttpUtil.isKeepAlive(request);
System.out.println("method" + request.method());
System.out.println("uri" + request.uri());
FullHttpResponse httpResponse = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
httpResponse.content().writeBytes("https".getBytes());
httpResponse.headers().set(HttpHeaderNames.CONTENT_TYPE, "text/html;charset=UTF-8");
httpResponse.headers().setInt(HttpHeaderNames.CONTENT_LENGTH, httpResponse.content().readableBytes());
if (keepaLive) {
httpResponse.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE);
ctx.writeAndFlush(httpResponse);
} else {
ctx.writeAndFlush(httpResponse).addListener(ChannelFutureListener.CLOSE);
}*/
}
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
cause.printStackTrace();
if (ctx.channel().isActive()) {
sendError(ctx, HttpResponseStatus.INTERNAL_SERVER_ERROR);
}
}
private static void sendError(ChannelHandlerContext ctx, HttpResponseStatus status) {
FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, status,
Unpooled.copiedBuffer("Failure: " + status.toString() + "\r\n", CharsetUtil.UTF_8));
response.headers().set(CONTENT_TYPE, "text/plain; charset=UTF-8");
ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE);
}
/* @Override
protected void messageReceived(ChannelHandlerContext ctx, FullHttpRequest request) throws Exception {
LOGGER.info("access messageReceived invoke success..");
Long startTime = System.currentTimeMillis();
// 400
if (!request.decoderResult().isSuccess()) {
sendError(ctx, HttpResponseStatus.BAD_REQUEST);
return;
}
// 405
if (request.method() != GET) {
sendError(ctx, HttpResponseStatus.METHOD_NOT_ALLOWED);
return;
}
FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, HttpResponseStatus.OK);
Map<String, String> parmMap = new RequestParser(request).parse();
//jQuery跨域携带标识符
String callback = parmMap.get("callback");
LOGGER.info("connection jsonp header:[{}],request param:[{}]",callback,parmMap.get("requestParam"));;
//请求参数
DeviceRequest deviceRequest = JSONObject.parseObject(parmMap.get("requestParam"), DeviceRequest.class);
DeviceResultWapper<?> result = getClientResponse(deviceRequest);
LOGGER.info("get client response success.. response:[{}]",JSONObject.toJSONString(result));
LOGGER.info("get client response take time:[{}]",(System.currentTimeMillis()-startTime)/1000+"s");
String content = callback + "("+JSONObject.toJSONString(result)+")";
byte[] bs = content.getBytes("UTF-8");
response.headers().set(CONTENT_TYPE, "text/html; charset=UTF-8");
response.headers().set(HttpHeaderNames.CONTENT_LENGTH, String.valueOf(bs.length));
response.content().writeBytes(ByteBuffer.wrap(bs));
ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE);
}
*/
private DeviceResultWapper<?> getClientResponse(DeviceRequest deviceRequest) {
// 拼接参数
DeviceCommandVo deviceCommandVo = DeviceType.wapperRequestParam(deviceRequest);
if (deviceCommandVo == null) {
return DeviceResultWapper.fail(400, "remote user with illegal param");
}
SerialPortOrder serialPortOrder = DeviceOrderFactory.produce(deviceCommandVo.getDeviceTypeId());
return serialPortOrder.order(deviceCommandVo);
}
}