diff --git a/broker/src/main/java/io/moquette/imhandler/RouteHandler.java b/broker/src/main/java/io/moquette/imhandler/RouteHandler.java index e6723bea..5bda5e6a 100644 --- a/broker/src/main/java/io/moquette/imhandler/RouteHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/RouteHandler.java @@ -10,6 +10,7 @@ package io.moquette.imhandler; import cn.wildfirechat.proto.WFCMessage; import com.hazelcast.core.Member; +import io.moquette.persistence.MemorySessionStore; import io.moquette.spi.ClientSession; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -24,6 +25,19 @@ import static io.moquette.BrokerConstants.HZ_Cluster_Node_External_Short_Port; public class RouteHandler extends IMHandler { @Override public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.RouteRequest request, Qos1PublishHandler.IMCallback callback) { + MemorySessionStore.Session session = m_sessionsStore.sessionForClientAndUser(fromUser, clientID); + if (session == null) { + ErrorCode errorCode = m_sessionsStore.loadActiveSession(fromUser, clientID); + if (errorCode != ErrorCode.ERROR_CODE_SUCCESS) { + return errorCode; + } + session = m_sessionsStore.sessionForClientAndUser(fromUser, clientID); + } + + if (session == null || session.getDeleted() > 0) { + return ErrorCode.ERROR_CODE_SECRECT_KEY_MISMATCH; + } + Member member = mServer.getHazelcastInstance().getCluster().getLocalMember(); String serverIp = member.getStringAttribute(HZ_Cluster_Node_External_IP); String longPort = member.getStringAttribute(HZ_Cluster_Node_External_Long_Port);