diff --git a/README.md b/README.md index 54661ce..b41ff8d 100644 --- a/README.md +++ b/README.md @@ -141,6 +141,9 @@ CIM采用业内主流开源技术构建,易于扩展和使用,并完美支 版本:4.1.0/时间:2022-02-15 1.websocket支持在握手时鉴权验证 -2.websocketPath 由 "/" 变更为 "" wss和ws链接地址后面不需要加/ + +https://www.yuque.com/yuanfangxiyang/ma4ytb/vvy3iz#mmdUX + +2.支持自定义配置websocketPath diff --git a/cim-boot-server/libs/cim-server-sdk-netty-4.1.0.jar b/cim-boot-server/libs/cim-server-sdk-netty-4.1.0.jar index 887f076..ee11325 100644 Binary files a/cim-boot-server/libs/cim-server-sdk-netty-4.1.0.jar and b/cim-boot-server/libs/cim-server-sdk-netty-4.1.0.jar differ diff --git a/cim-boot-server/src/main/java/com/farsunset/cim/config/CIMConfig.java b/cim-boot-server/src/main/java/com/farsunset/cim/config/CIMConfig.java index 45ea155..539edbc 100644 --- a/cim-boot-server/src/main/java/com/farsunset/cim/config/CIMConfig.java +++ b/cim-boot-server/src/main/java/com/farsunset/cim/config/CIMConfig.java @@ -10,7 +10,6 @@ import com.farsunset.cim.sdk.server.handler.CIMRequestHandler; import com.farsunset.cim.sdk.server.model.SentBody; import com.farsunset.cim.service.SessionService; import io.netty.channel.Channel; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationListener; @@ -49,6 +48,7 @@ public class CIMConfig implements CIMRequestHandler, ApplicationListener - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/handler/CIMNioSocketAcceptor.java b/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/handler/CIMNioSocketAcceptor.java index d6d585e..70e7ee4 100644 --- a/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/handler/CIMNioSocketAcceptor.java +++ b/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/handler/CIMNioSocketAcceptor.java @@ -58,7 +58,7 @@ import java.util.function.Predicate; public class CIMNioSocketAcceptor extends SimpleChannelInboundHandler{ private static final Logger LOGGER = LoggerFactory.getLogger(CIMNioSocketAcceptor.class); - private static final int PONG_TIME_OUT_COUNT = 3; + private static final int PONG_TIME_OUT_COUNT = 3; private final ThreadFactory bossThreadFactory; private final ThreadFactory workerThreadFactory; @@ -70,6 +70,7 @@ public class CIMNioSocketAcceptor extends SimpleChannelInboundHandler{ private final Integer appPort; private final Integer webPort; + private final String websocketPath; private final CIMRequestHandler outerRequestHandler; private final HandshakeHandler handshakeHandler; @@ -90,6 +91,7 @@ public class CIMNioSocketAcceptor extends SimpleChannelInboundHandler{ this.appPort = builder.appPort; this.outerRequestHandler = builder.outerRequestHandler; this.handshakeHandler = new HandshakeHandler(builder.handshakePredicate); + this.websocketPath = builder.websocketPath == null ? "/" : builder.websocketPath; bossThreadFactory = r -> { Thread thread = new Thread(r); @@ -145,8 +147,8 @@ public class CIMNioSocketAcceptor extends SimpleChannelInboundHandler{ } } - public void destroy() { - this.destroy(appBossGroup,appWorkerGroup); + public void destroy() { + this.destroy(appBossGroup,appWorkerGroup); this.destroy(webBossGroup,webWorkerGroup); } @@ -189,7 +191,7 @@ public class CIMNioSocketAcceptor extends SimpleChannelInboundHandler{ ch.pipeline().addLast(new HttpServerCodec()); ch.pipeline().addLast(new ChunkedWriteHandler()); ch.pipeline().addLast(new HttpObjectAggregator(4 * 1024)); - ch.pipeline().addLast(new WebSocketServerProtocolHandler("",false)); + ch.pipeline().addLast(new WebSocketServerProtocolHandler(websocketPath,false)); ch.pipeline().addLast(handshakeHandler); ch.pipeline().addLast(new WebMessageDecoder()); ch.pipeline().addLast(new WebMessageEncoder()); @@ -301,6 +303,7 @@ public class CIMNioSocketAcceptor extends SimpleChannelInboundHandler{ private Integer appPort; private Integer webPort; + private String websocketPath; private CIMRequestHandler outerRequestHandler; private Predicate handshakePredicate; @@ -314,6 +317,11 @@ public class CIMNioSocketAcceptor extends SimpleChannelInboundHandler{ return this; } + public Builder setWebsocketPath(String websocketPath) { + this.websocketPath = websocketPath; + return this; + } + /** * 设置应用层的sentBody处理handler */ diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/handshake/HandshakeHandler.java b/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/handshake/HandshakeHandler.java index fc00bd4..612872c 100644 --- a/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/handshake/HandshakeHandler.java +++ b/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/handshake/HandshakeHandler.java @@ -38,16 +38,20 @@ import java.util.function.Predicate; @ChannelHandler.Sharable public class HandshakeHandler extends ChannelInboundHandlerAdapter { - private final Predicate handshakePredicate; + /* + 客户端接收到的CloseEvent事件类型 + 客户端可通过该code判断是握手鉴权失败 + */ + private static final int UNAUTHORIZED_CODE = 4001; - private final WebSocketCloseStatus closeStatus = new WebSocketCloseStatus(HttpResponseStatus.UNAUTHORIZED.code(),HttpResponseStatus.UNAUTHORIZED.reasonPhrase()); + private final Predicate handshakePredicate; public HandshakeHandler(Predicate handshakePredicate) { this.handshakePredicate = handshakePredicate; } @Override - public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { super.userEventTriggered(ctx, evt); @@ -67,7 +71,7 @@ public class HandshakeHandler extends ChannelInboundHandlerAdapter { * 鉴权不通过,关闭链接 */ if (!handshakePredicate.test(HandshakeEvent.of(event))) { - context.channel().writeAndFlush(new CloseWebSocketFrame(closeStatus)).addListener(ChannelFutureListener.CLOSE); + context.channel().writeAndFlush(new CloseWebSocketFrame(UNAUTHORIZED_CODE,HttpResponseStatus.UNAUTHORIZED.reasonPhrase())).addListener(ChannelFutureListener.CLOSE); } } } \ No newline at end of file