From ab6cf6661a28e845da41e288ef9944165862b1af Mon Sep 17 00:00:00 2001 From: wanggeng <450292408@qq.com> Date: Wed, 8 Dec 2021 12:05:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0websocket=E5=86=85=E5=AE=B9AE?= =?UTF-8?q?S=E5=8A=A0=E8=A7=A3=E5=AF=86=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../websocket/WebSocketProperties.java | 9 +++++++++ .../instantmessage/startup/WebSocketStartUp.java | 7 ++++++- .../websocket/handler/WebSocketHandler.java | 1 + .../handler/text/WebSocketTextHandler.java | 14 ++++++++++++-- .../manager/WebSocketChannelManager.java | 16 ++++++++++++++-- 5 files changed, 42 insertions(+), 5 deletions(-) diff --git a/basic-properties/src/main/java/ink/wgink/properties/websocket/WebSocketProperties.java b/basic-properties/src/main/java/ink/wgink/properties/websocket/WebSocketProperties.java index 82e88a37..01a440aa 100644 --- a/basic-properties/src/main/java/ink/wgink/properties/websocket/WebSocketProperties.java +++ b/basic-properties/src/main/java/ink/wgink/properties/websocket/WebSocketProperties.java @@ -18,6 +18,7 @@ public class WebSocketProperties { private String url; private Integer port; private String context; + private Boolean isEncrypt; public String getScheme() { return scheme == null ? "ws" : scheme.trim(); @@ -50,4 +51,12 @@ public class WebSocketProperties { public void setContext(String context) { this.context = context; } + + public Boolean getEncrypt() { + return isEncrypt == null ? false : isEncrypt; + } + + public void setEncrypt(Boolean encrypt) { + isEncrypt = encrypt; + } } diff --git a/module-instant-message/src/main/java/ink/wgink/module/instantmessage/startup/WebSocketStartUp.java b/module-instant-message/src/main/java/ink/wgink/module/instantmessage/startup/WebSocketStartUp.java index 5240d4c3..b883dba5 100644 --- a/module-instant-message/src/main/java/ink/wgink/module/instantmessage/startup/WebSocketStartUp.java +++ b/module-instant-message/src/main/java/ink/wgink/module/instantmessage/startup/WebSocketStartUp.java @@ -3,6 +3,7 @@ package ink.wgink.module.instantmessage.startup; import ink.wgink.interfaces.manager.IWebSocketUserSessionManager; import ink.wgink.module.instantmessage.websocket.manager.WebSocketChannelManager; import ink.wgink.module.instantmessage.websocket.server.WebSocketServer; +import ink.wgink.properties.websocket.WebSocketProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; @@ -21,11 +22,15 @@ public class WebSocketStartUp implements ApplicationRunner { @Autowired private WebSocketServer webSocketServer; @Autowired + private WebSocketProperties webSocketProperties; + @Autowired private IWebSocketUserSessionManager webSocketUserSessionManager; @Override public void run(ApplicationArguments args) throws Exception { - WebSocketChannelManager.getInstance().setWebSocketUserSessionManager(webSocketUserSessionManager); + WebSocketChannelManager webSocketChannelManager = WebSocketChannelManager.getInstance(); + webSocketChannelManager.setWebSocketUserSessionManager(webSocketUserSessionManager); + webSocketChannelManager.setWebSocketProperties(webSocketProperties); new Thread(webSocketServer).start(); } diff --git a/module-instant-message/src/main/java/ink/wgink/module/instantmessage/websocket/handler/WebSocketHandler.java b/module-instant-message/src/main/java/ink/wgink/module/instantmessage/websocket/handler/WebSocketHandler.java index d5a5adfc..0c352947 100644 --- a/module-instant-message/src/main/java/ink/wgink/module/instantmessage/websocket/handler/WebSocketHandler.java +++ b/module-instant-message/src/main/java/ink/wgink/module/instantmessage/websocket/handler/WebSocketHandler.java @@ -84,6 +84,7 @@ public class WebSocketHandler extends SimpleChannelInboundHandler { WebSocketTextHandler webSocketTextHandler = new WebSocketTextHandler(); webSocketTextHandler.setWebSocketTextCustomHandler(IWebSocketTextCustomService); webSocketTextHandler.setMessageService(messageService); + webSocketTextHandler.setWebSocketProperties(webSocketProperties); webSocketTextHandler.handler(ctx, (TextWebSocketFrame) frame); return; } diff --git a/module-instant-message/src/main/java/ink/wgink/module/instantmessage/websocket/handler/text/WebSocketTextHandler.java b/module-instant-message/src/main/java/ink/wgink/module/instantmessage/websocket/handler/text/WebSocketTextHandler.java index b7a7a050..1238f1c3 100644 --- a/module-instant-message/src/main/java/ink/wgink/module/instantmessage/websocket/handler/text/WebSocketTextHandler.java +++ b/module-instant-message/src/main/java/ink/wgink/module/instantmessage/websocket/handler/text/WebSocketTextHandler.java @@ -15,6 +15,7 @@ import ink.wgink.module.instantmessage.websocket.pojo.body.IdsBody; import ink.wgink.module.instantmessage.websocket.pojo.body.RegisterBody; import ink.wgink.module.instantmessage.websocket.pojo.body.MessageSendStatusBody; import ink.wgink.pojo.session.WebSocketSession; +import ink.wgink.properties.websocket.WebSocketProperties; import ink.wgink.util.AesUtil; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; @@ -42,13 +43,18 @@ public class WebSocketTextHandler { private static final Logger LOG = LoggerFactory.getLogger(WebSocketTextHandler.class); private IWebSocketTextCustomService IWebSocketTextCustomService; private IMessageService messageService; + private WebSocketProperties webSocketProperties; public void handler(ChannelHandlerContext ctx, TextWebSocketFrame textWebSocketFrame) { WebSocketClientMessage clientSocketMessage = null; MessageSendStatusBody messageSendStatusBody = null; try { - String decodeMessage = AesUtil.aesCommonDecoder(WebSocketChannelManager.MESSAGE_AES_KEY, textWebSocketFrame.text()); - clientSocketMessage = JSONObject.parseObject(decodeMessage, WebSocketClientMessage.class); + if (webSocketProperties.getEncrypt()) { + String decodeMessage = AesUtil.aesCommonDecoder(WebSocketChannelManager.MESSAGE_AES_KEY, textWebSocketFrame.text()); + clientSocketMessage = JSONObject.parseObject(decodeMessage, WebSocketClientMessage.class); + } else { + clientSocketMessage = JSONObject.parseObject(textWebSocketFrame.text(), WebSocketClientMessage.class); + } if (clientSocketMessage.getType() == null) { throw new TypeException("Type类型不能为空"); } @@ -265,4 +271,8 @@ public class WebSocketTextHandler { public void setMessageService(IMessageService messageService) { this.messageService = messageService; } + + public void setWebSocketProperties(WebSocketProperties webSocketProperties) { + this.webSocketProperties = webSocketProperties; + } } diff --git a/module-instant-message/src/main/java/ink/wgink/module/instantmessage/websocket/manager/WebSocketChannelManager.java b/module-instant-message/src/main/java/ink/wgink/module/instantmessage/websocket/manager/WebSocketChannelManager.java index 2c94cb98..c49695f2 100644 --- a/module-instant-message/src/main/java/ink/wgink/module/instantmessage/websocket/manager/WebSocketChannelManager.java +++ b/module-instant-message/src/main/java/ink/wgink/module/instantmessage/websocket/manager/WebSocketChannelManager.java @@ -2,10 +2,11 @@ package ink.wgink.module.instantmessage.websocket.manager; import com.alibaba.fastjson.JSONObject; import ink.wgink.exceptions.websocket.SessionException; -import ink.wgink.interfaces.manager.IWebSocketUserSessionManager; import ink.wgink.interfaces.manager.IWebSocketChannelManager; +import ink.wgink.interfaces.manager.IWebSocketUserSessionManager; import ink.wgink.module.instantmessage.websocket.pojo.WebSocketClientMessage; import ink.wgink.pojo.session.WebSocketSession; +import ink.wgink.properties.websocket.WebSocketProperties; import ink.wgink.util.AesUtil; import io.netty.channel.Channel; import io.netty.channel.group.ChannelGroup; @@ -28,6 +29,7 @@ public class WebSocketChannelManager implements IWebSocketChannelManager { private static final WebSocketChannelManager webSocketChannelManager = WebSocketChannelManagerBuilder.webSocketChannelManager; private ChannelGroup globalGroup = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); private IWebSocketUserSessionManager webSocketUserSessionManager; + private WebSocketProperties webSocketProperties; private WebSocketChannelManager() { } @@ -154,7 +156,13 @@ public class WebSocketChannelManager implements IWebSocketChannelManager { if (toChannel == null || !toChannel.isOpen() || !toChannel.isActive()) { return; } - TextWebSocketFrame textWebSocketFrame = new TextWebSocketFrame(AesUtil.aesCommonEncoder(MESSAGE_AES_KEY, JSONObject.toJSONString(webSocketClientMessage))); + String message; + if (webSocketProperties.getEncrypt()) { + message = AesUtil.aesCommonEncoder(MESSAGE_AES_KEY, JSONObject.toJSONString(webSocketClientMessage)); + } else { + message = JSONObject.toJSONString(webSocketClientMessage); + } + TextWebSocketFrame textWebSocketFrame = new TextWebSocketFrame(message); toChannel.writeAndFlush(textWebSocketFrame); } @@ -170,6 +178,10 @@ public class WebSocketChannelManager implements IWebSocketChannelManager { } } + public void setWebSocketProperties(WebSocketProperties webSocketProperties) { + this.webSocketProperties = webSocketProperties; + } + @Override public void setWebSocketUserSessionManager(IWebSocketUserSessionManager webSocketUserSessionManager) { this.webSocketUserSessionManager = webSocketUserSessionManager;