httpRoute method
void
httpRoute(})
设置http服务的AES加密通讯的动态请求路由,调用过此方法后过启动为web服务器
Implementation
void httpRoute(String route, HttpRouteHandler handler, {HttpTokenConverter? tokenConverter, Map<String, Object>? responseHeaders}) {
_router ??= Router();
_router?.post(route, (Request request) async {
logTrace(['_onHttpRoute <=', request.headers]);
//合并二进制包
final requestBytes = <int>[];
if (_config.binary) {
final requestBytesList = await request.read().toList();
for (var element in requestBytesList) {
requestBytes.addAll(element);
}
if (requestBytesList.length > 1) {
logTrace(['_onHttpRoute <= requestBytesList.length is ${requestBytesList.length}, so merge to one list.']);
}
}
//解析请求数据
final requestData = _config.binary ? Uint8List.fromList(requestBytes) : await request.readAsString();
logTrace(['_onHttpRoute <=', requestData]);
final requestUid = (request.headers['easy-security-identity'] ?? '').trim();
final requestToken = (tokenConverter == null || requestUid.isEmpty) ? null : await tokenConverter(requestUid);
final requestPacket = EasySecurity.decrypt(requestData, requestToken ?? _config.pwd);
if (requestPacket == null) {
logError(['_onHttpRoute <=', requestData, requestUid, requestToken, requestPacket]);
return Response.internalServerError(headers: responseHeaders);
}
logDebug(['_onHttpRoute <<<<<<', requestPacket]);
//路由响应数据
final responsePacket = await handler(request, requestPacket) ?? requestPacket.responseOk();
logDebug(['_onHttpRoute >>>>>>', responsePacket]);
final responseData = EasySecurity.encrypt(responsePacket, requestToken ?? _config.pwd, _config.binary);
if (responseData == null) {
logError(['_onHttpRoute =>', responsePacket, responseData]);
return Response.internalServerError(headers: responseHeaders);
}
logTrace(['_onHttpRoute =>', responseData]);
return Response.ok(responseData, headers: {'content-type': _config.binary ? 'application/octet-stream' : 'text/plain'}..addAll(responseHeaders ?? {}));
});
}