From 461be0fab10472defbfdf3c13d232d836470ab5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=9C=E6=96=B9=E5=A4=95=E9=98=B3?= Date: Tue, 10 May 2022 17:07:39 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81websocket=E9=89=B4=E6=9D=83=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E6=97=B6=E5=93=8D=E5=BA=94ReplyBody=EF=BC=8C=E5=91=8A?= =?UTF-8?q?=E7=9F=A5=E5=AE=A2=E6=88=B7=E7=AB=AF=E9=89=B4=E6=9D=83=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../libs/cim-server-sdk-netty-4.2.0.jar | Bin 94015 -> 94226 bytes .../predicate/HandshakePredicate.java | 2 +- .../page/console/webclient/index.html | 29 ++++--- .../resources/static/js/cim/cim.web.sdk.js | 25 +++++- cim-client-sdk/cim-web-sdk/cim.web.sdk.js | 74 ++++++++++++++---- .../farsunset/cim/constant/CIMConstant.java | 2 + .../cim/handshake/HandshakeHandler.java | 15 ++-- .../com/farsunset/cim/model/ReplyBody.java | 8 ++ .../cim-client-web-json/index.html | 28 ++++--- .../cim-client-web-json/js/cim/cim.web.sdk.js | 19 ++++- .../cim-client-web-protobuf/index.html | 28 ++++--- .../js/cim/cim.web.sdk.js | 28 ++++++- 12 files changed, 193 insertions(+), 65 deletions(-) diff --git a/cim-boot-server/libs/cim-server-sdk-netty-4.2.0.jar b/cim-boot-server/libs/cim-server-sdk-netty-4.2.0.jar index d7f72a84ad6e8905f255426d7736f7e21da1bad7..18e6503abbbb7dd39462ae2e6e710131baa78c0e 100644 GIT binary patch delta 6590 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 F{12+DiUt4x delta 6419 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 { /** - * + * 验证身份信息,本方法切勿进行耗时操作!!! * @param event * @return true验证通过 false验证失败 */ diff --git a/cim-boot-server/src/main/resources/page/console/webclient/index.html b/cim-boot-server/src/main/resources/page/console/webclient/index.html index 8f6e410..94a36a4 100644 --- a/cim-boot-server/src/main/resources/page/console/webclient/index.html +++ b/cim-boot-server/src/main/resources/page/console/webclient/index.html @@ -29,18 +29,25 @@ function onReplyReceived(reply) { console.log(reply); - if(reply.key==='client_bind' && reply.code === "200" ) - { - hideProcess(); - - $('#LoginDialog').fadeOut(); + if (reply.key === KEY_CLIENT_BIND && reply.code === CODE_OK) { + hideProcess(); + + $('#LoginDialog').fadeOut(); + + $('#MessageDialog').fadeIn(); + $('#MessageDialog').addClass("in"); + $("#current_account").text($('#account').val()); + + } + + /** + * 链接鉴权失败 + */ + if(reply.key === KEY_HANDSHAKE && reply.code === CODE_UNAUTHORIZED){ + hideProcess(); + showETip("鉴权失败"); + } - - $('#MessageDialog').fadeIn(); - $('#MessageDialog').addClass("in"); - $("#current_account").text($('#account').val()); - - } } /** 当收到消息时候回调 **/ diff --git a/cim-boot-server/src/main/resources/static/js/cim/cim.web.sdk.js b/cim-boot-server/src/main/resources/static/js/cim/cim.web.sdk.js index 86411e6..e226705 100644 --- a/cim-boot-server/src/main/resources/static/js/cim/cim.web.sdk.js +++ b/cim-boot-server/src/main/resources/static/js/cim/cim.web.sdk.js @@ -21,6 +21,16 @@ const REPLY_BODY = 4; const SENT_BODY = 3; const PING = 1; const PONG = 0; + +/* + * 握手鉴权常量 + */ +const KEY_HANDSHAKE = "client_handshake"; +const CODE_UNAUTHORIZED = "401"; + +const CODE_OK = "200"; +const KEY_CLIENT_BIND = "client_bind"; + /** * PONG字符串转换后 * @type {Uint8Array} @@ -54,7 +64,7 @@ CIMPushManager.bind = function (account) { let browser = getBrowser(); let body = new proto.com.farsunset.cim.sdk.web.model.SentBody(); - body.setKey("client_bind"); + body.setKey(KEY_CLIENT_BIND); body.setTimestamp(new Date().getTime()); body.getDataMap().set("uid", account); body.getDataMap().set("channel", APP_CHANNEL); @@ -106,7 +116,8 @@ CIMPushManager.innerOnMessageReceived = function (e) { if (type === REPLY_BODY) { let message = proto.com.farsunset.cim.sdk.web.model.ReplyBody.deserializeBinary(body); - /** + + /* * 将proto对象转换成json对象,去除无用信息 */ let reply = {}; @@ -116,13 +127,21 @@ CIMPushManager.innerOnMessageReceived = function (e) { reply.timestamp = message.getTimestamp(); reply.data = {}; - /** + /* * 注意,遍历map这里的参数 value在前key在后 */ message.getDataMap().forEach(function (v, k) { reply.data[k] = v; }); + /* + * 判断是否是握手鉴权失败 + * 终止后续自动重连 + */ + if(reply.key === KEY_HANDSHAKE && reply.code === CODE_UNAUTHORIZED){ + manualStop = true; + } + onReplyReceived(reply); } }; diff --git a/cim-client-sdk/cim-web-sdk/cim.web.sdk.js b/cim-client-sdk/cim-web-sdk/cim.web.sdk.js index 59ea3f5..e226705 100644 --- a/cim-client-sdk/cim-web-sdk/cim.web.sdk.js +++ b/cim-client-sdk/cim-web-sdk/cim.web.sdk.js @@ -1,5 +1,5 @@ /*CIM服务器IP*/ -const CIM_HOST = "127.0.0.1"; +const CIM_HOST = window.location.hostname; /* *服务端 websocket端口 */ @@ -7,7 +7,7 @@ const CIM_PORT = 34567; const CIM_URI = "ws://" + CIM_HOST + ":" + CIM_PORT; const APP_VERSION = "1.0.0"; -const APP_CHANNEL = "browser"; +const APP_CHANNEL = "web"; const APP_PACKAGE = "com.farsunset.cim"; /* @@ -18,6 +18,25 @@ const DATA_HEADER_LENGTH = 1; const MESSAGE = 2; const REPLY_BODY = 4; +const SENT_BODY = 3; +const PING = 1; +const PONG = 0; + +/* + * 握手鉴权常量 + */ +const KEY_HANDSHAKE = "client_handshake"; +const CODE_UNAUTHORIZED = "401"; + +const CODE_OK = "200"; +const KEY_CLIENT_BIND = "client_bind"; + +/** + * PONG字符串转换后 + * @type {Uint8Array} + */ +const PONG_BODY = new Uint8Array([80,79,78,71]); + let socket; let manualStop = false; @@ -33,27 +52,28 @@ CIMPushManager.connect = function () { socket.onclose = CIMPushManager.innerOnConnectionClosed; }; -CIMPushManager.bindAccount = function (account) { +CIMPushManager.bind = function (account) { window.localStorage.account = account; - let deviceId = window.localStorage.deviceIddeviceId; - if (deviceId == '' || deviceId == undefined) { + let deviceId = window.localStorage.deviceId; + if (deviceId === '' || deviceId === undefined) { deviceId = generateUUID(); window.localStorage.deviceId = deviceId; } let browser = getBrowser(); let body = new proto.com.farsunset.cim.sdk.web.model.SentBody(); - body.setKey("client_bind"); + body.setKey(KEY_CLIENT_BIND); body.setTimestamp(new Date().getTime()); - body.getDataMap().set("account", account); + body.getDataMap().set("uid", account); body.getDataMap().set("channel", APP_CHANNEL); body.getDataMap().set("appVersion", APP_VERSION); body.getDataMap().set("osVersion", browser.version); body.getDataMap().set("packageName", APP_PACKAGE); body.getDataMap().set("deviceId", deviceId); - body.getDataMap().set("device", browser.name); + body.getDataMap().set("deviceName", browser.name); + body.getDataMap().set("language", navigator.language); CIMPushManager.sendRequest(body); }; @@ -83,15 +103,21 @@ CIMPushManager.innerOnMessageReceived = function (e) { let type = data[0]; let body = data.subarray(DATA_HEADER_LENGTH, data.length); - if (type == MESSAGE) { + if (type === PING) { + CIMPushManager.pong(); + return; + } + + if (type === MESSAGE) { let message = proto.com.farsunset.cim.sdk.web.model.Message.deserializeBinary(body); onInterceptMessageReceived(message.toObject(false)); return; } - if (type == REPLY_BODY) { + if (type === REPLY_BODY) { let message = proto.com.farsunset.cim.sdk.web.model.ReplyBody.deserializeBinary(body); - /** + + /* * 将proto对象转换成json对象,去除无用信息 */ let reply = {}; @@ -101,13 +127,21 @@ CIMPushManager.innerOnMessageReceived = function (e) { reply.timestamp = message.getTimestamp(); reply.data = {}; - /** + /* * 注意,遍历map这里的参数 value在前key在后 */ message.getDataMap().forEach(function (v, k) { reply.data[k] = v; }); + /* + * 判断是否是握手鉴权失败 + * 终止后续自动重连 + */ + if(reply.key === KEY_HANDSHAKE && reply.code === CODE_UNAUTHORIZED){ + manualStop = true; + } + onReplyReceived(reply); } }; @@ -123,16 +157,24 @@ CIMPushManager.innerOnConnectionClosed = function (e) { CIMPushManager.sendRequest = function (body) { let data = body.serializeBinary(); - let protobuf = new Uint8Array(data.length); - protobuf.set(data, 0); + let protobuf = new Uint8Array(data.length + 1); + protobuf[0] = SENT_BODY; + protobuf.set(data, 1); socket.send(protobuf); }; +CIMPushManager.pong = function () { + let pong = new Uint8Array(PONG_BODY.byteLength + 1); + pong[0] = PONG; + pong.set(PONG_BODY,1); + socket.send(pong); +}; + function onInterceptMessageReceived(message) { /* *被强制下线之后,不再继续连接服务端 */ - if (message.action == ACTION_999) { + if (message.action === ACTION_999) { manualStop = true; } /* @@ -174,7 +216,7 @@ function generateUUID() { let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { let r = (d + Math.random() * 16) % 16 | 0; d = Math.floor(d / 16); - return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16); + return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16); }); return uuid.replace(/-/g, ''); } diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/constant/CIMConstant.java b/cim-server-sdk/src/main/java/com/farsunset/cim/constant/CIMConstant.java index a382c95..29ad5ee 100644 --- a/cim-server-sdk/src/main/java/com/farsunset/cim/constant/CIMConstant.java +++ b/cim-server-sdk/src/main/java/com/farsunset/cim/constant/CIMConstant.java @@ -33,4 +33,6 @@ public interface CIMConstant { String CLIENT_CONNECT_CLOSED = "client_closed"; + String CLIENT_HANDSHAKE = "client_handshake"; + } diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/handshake/HandshakeHandler.java b/cim-server-sdk/src/main/java/com/farsunset/cim/handshake/HandshakeHandler.java index a26bc03..8c8acf4 100644 --- a/cim-server-sdk/src/main/java/com/farsunset/cim/handshake/HandshakeHandler.java +++ b/cim-server-sdk/src/main/java/com/farsunset/cim/handshake/HandshakeHandler.java @@ -21,12 +21,13 @@ */ package com.farsunset.cim.handshake; +import com.farsunset.cim.constant.CIMConstant; +import com.farsunset.cim.model.ReplyBody; import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.handler.codec.http.HttpResponseStatus; -import io.netty.handler.codec.http.websocketx.CloseWebSocketFrame; import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler; import java.util.function.Predicate; @@ -36,12 +37,12 @@ import java.util.function.Predicate; */ @ChannelHandler.Sharable public class HandshakeHandler extends ChannelInboundHandlerAdapter { - /* - 客户端接收到的CloseEvent事件类型 - 客户端可通过该code判断是握手鉴权失败 + *认证失败,返回replyBody给客户端 */ - private static final int UNAUTHORIZED_CODE = 4001; + private final ReplyBody failedBody = ReplyBody.make(CIMConstant.CLIENT_HANDSHAKE, + HttpResponseStatus.UNAUTHORIZED.code(), + HttpResponseStatus.UNAUTHORIZED.reasonPhrase()); private final Predicate handshakePredicate; @@ -67,10 +68,10 @@ public class HandshakeHandler extends ChannelInboundHandlerAdapter { } /* - * 鉴权不通过,关闭链接 + * 鉴权不通过,发送响应体并关闭链接 */ if (!handshakePredicate.test(HandshakeEvent.of(event))) { - context.channel().writeAndFlush(new CloseWebSocketFrame(UNAUTHORIZED_CODE,HttpResponseStatus.UNAUTHORIZED.reasonPhrase())).addListener(ChannelFutureListener.CLOSE); + context.channel().writeAndFlush(failedBody).addListener(ChannelFutureListener.CLOSE); } } } \ No newline at end of file diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/model/ReplyBody.java b/cim-server-sdk/src/main/java/com/farsunset/cim/model/ReplyBody.java index cc8a6f5..904e9bd 100644 --- a/cim-server-sdk/src/main/java/com/farsunset/cim/model/ReplyBody.java +++ b/cim-server-sdk/src/main/java/com/farsunset/cim/model/ReplyBody.java @@ -148,4 +148,12 @@ public class ReplyBody implements Serializable, Transportable { public DataType getType() { return DataType.REPLY; } + + public static ReplyBody make(String key,int code,String message){ + ReplyBody body = new ReplyBody(); + body.key = key; + body.code = String.valueOf(code); + body.message = message; + return body; + } } diff --git a/cim-use-examples/cim-client-web-json/index.html b/cim-use-examples/cim-client-web-json/index.html index 5f95ea1..85ceb01 100644 --- a/cim-use-examples/cim-client-web-json/index.html +++ b/cim-use-examples/cim-client-web-json/index.html @@ -26,18 +26,24 @@ function onReplyReceived(reply) { console.log(reply); - if(reply.key==='client_bind' && reply.code === "200" ) - { - hideProcess(); - - $('#LoginDialog').fadeOut(); + if (reply.key === KEY_CLIENT_BIND && reply.code === CODE_OK) { + hideProcess(); - - $('#MessageDialog').fadeIn(); - $('#MessageDialog').addClass("in"); - $("#current_account").text($('#account').val()); - - } + $('#LoginDialog').fadeOut(); + + $('#MessageDialog').fadeIn(); + $('#MessageDialog').addClass("in"); + $("#current_account").text($('#account').val()); + + } + + /** + * 链接鉴权失败 + */ + if(reply.key === KEY_HANDSHAKE && reply.code === CODE_UNAUTHORIZED){ + hideProcess(); + showETip("鉴权失败"); + } } /** 当收到消息时候回调 **/ diff --git a/cim-use-examples/cim-client-web-json/js/cim/cim.web.sdk.js b/cim-use-examples/cim-client-web-json/js/cim/cim.web.sdk.js index b5ac93b..f677e05 100644 --- a/cim-use-examples/cim-client-web-json/js/cim/cim.web.sdk.js +++ b/cim-use-examples/cim-client-web-json/js/cim/cim.web.sdk.js @@ -21,6 +21,16 @@ const REPLY_BODY = 4; const SENT_BODY = 3; const PING = 1; const PONG = 0; + +/* + * 握手鉴权常量 + */ +const KEY_HANDSHAKE = "client_handshake"; +const CODE_UNAUTHORIZED = "401"; + +const CODE_OK = "200"; +const KEY_CLIENT_BIND = "client_bind"; + /** * PONG字符串转换后 * @type {Uint8Array} @@ -53,7 +63,7 @@ CIMPushManager.bind = function (account) { let browser = getBrowser().name; let body = {}; - body.key ="client_bind"; + body.key = KEY_CLIENT_BIND; body.timestamp=new Date().getTime(); body.data = {}; body.data.uid = account; @@ -107,6 +117,13 @@ CIMPushManager.innerOnMessageReceived = function (e) { if (type === REPLY_BODY) { let reply = JSON.parse(body); + /* + * 判断是否是握手鉴权失败 + * 终止后续自动重连 + */ + if(reply.key === KEY_HANDSHAKE && reply.code === CODE_UNAUTHORIZED){ + manualStop = true; + } onReplyReceived(reply); } }; diff --git a/cim-use-examples/cim-client-web-protobuf/index.html b/cim-use-examples/cim-client-web-protobuf/index.html index ec73d00..b95ccdd 100644 --- a/cim-use-examples/cim-client-web-protobuf/index.html +++ b/cim-use-examples/cim-client-web-protobuf/index.html @@ -29,18 +29,24 @@ function onReplyReceived(reply) { console.log(reply); - if(reply.key==='client_bind' && reply.code === "200" ) - { - hideProcess(); - - $('#LoginDialog').fadeOut(); + if (reply.key === KEY_CLIENT_BIND && reply.code === CODE_OK) { + hideProcess(); - - $('#MessageDialog').fadeIn(); - $('#MessageDialog').addClass("in"); - $("#current_account").text($('#account').val()); - - } + $('#LoginDialog').fadeOut(); + + $('#MessageDialog').fadeIn(); + $('#MessageDialog').addClass("in"); + $("#current_account").text($('#account').val()); + + } + + /** + * 链接鉴权失败 + */ + if(reply.key === KEY_HANDSHAKE && reply.code === CODE_UNAUTHORIZED){ + hideProcess(); + showETip("鉴权失败"); + } } /** 当收到消息时候回调 **/ diff --git a/cim-use-examples/cim-client-web-protobuf/js/cim/cim.web.sdk.js b/cim-use-examples/cim-client-web-protobuf/js/cim/cim.web.sdk.js index 5997823..71b1209 100644 --- a/cim-use-examples/cim-client-web-protobuf/js/cim/cim.web.sdk.js +++ b/cim-use-examples/cim-client-web-protobuf/js/cim/cim.web.sdk.js @@ -21,6 +21,16 @@ const REPLY_BODY = 4; const SENT_BODY = 3; const PING = 1; const PONG = 0; + +/* + * 握手鉴权常量 + */ +const KEY_HANDSHAKE = "client_handshake"; +const CODE_UNAUTHORIZED = "401"; + +const CODE_OK = "200"; +const KEY_CLIENT_BIND = "client_bind"; + /** * PONG字符串转换后 * @type {Uint8Array} @@ -54,7 +64,7 @@ CIMPushManager.bind = function (account) { let browser = getBrowser(); let body = new proto.com.farsunset.cim.sdk.web.model.SentBody(); - body.setKey("client_bind"); + body.setKey(KEY_CLIENT_BIND); body.setTimestamp(new Date().getTime()); body.getDataMap().set("uid", account); body.getDataMap().set("channel", APP_CHANNEL); @@ -63,6 +73,7 @@ CIMPushManager.bind = function (account) { body.getDataMap().set("packageName", APP_PACKAGE); body.getDataMap().set("deviceId", deviceId); body.getDataMap().set("deviceName", browser.name); + body.getDataMap().set("language", navigator.language); CIMPushManager.sendRequest(body); }; @@ -105,7 +116,8 @@ CIMPushManager.innerOnMessageReceived = function (e) { if (type === REPLY_BODY) { let message = proto.com.farsunset.cim.sdk.web.model.ReplyBody.deserializeBinary(body); - /** + + /* * 将proto对象转换成json对象,去除无用信息 */ let reply = {}; @@ -115,13 +127,21 @@ CIMPushManager.innerOnMessageReceived = function (e) { reply.timestamp = message.getTimestamp(); reply.data = {}; - /** + /* * 注意,遍历map这里的参数 value在前key在后 */ message.getDataMap().forEach(function (v, k) { reply.data[k] = v; }); + /* + * 判断是否是握手鉴权失败 + * 终止后续自动重连 + */ + if(reply.key === KEY_HANDSHAKE && reply.code === CODE_UNAUTHORIZED){ + manualStop = true; + } + onReplyReceived(reply); } }; @@ -200,4 +220,4 @@ function generateUUID() { }); return uuid.replace(/-/g, ''); } - \ No newline at end of file + \ No newline at end of file