From fe525e948302f6b813b1924b48493338031648d4 Mon Sep 17 00:00:00 2001 From: imhao183 Date: Tue, 17 Dec 2019 10:11:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=94=A8=E6=88=B7session?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../moquette/imhandler/GetTokenHandler.java | 2 +- .../persistence/MemorySessionStore.java | 21 ++++++++++++++----- .../java/io/moquette/spi/ISessionsStore.java | 2 +- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/broker/src/main/java/io/moquette/imhandler/GetTokenHandler.java b/broker/src/main/java/io/moquette/imhandler/GetTokenHandler.java index 557e5813..b0f942b8 100644 --- a/broker/src/main/java/io/moquette/imhandler/GetTokenHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/GetTokenHandler.java @@ -20,7 +20,7 @@ import win.liyufan.im.IMTopic; public class GetTokenHandler extends IMHandler { @Override public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.GetTokenRequest request, Qos1PublishHandler.IMCallback callback) { - MemorySessionStore.Session session = m_sessionsStore.createUserSession(fromUser, clientID, request.getPlatform()); + MemorySessionStore.Session session = m_sessionsStore.updateOrCreateUserSession(fromUser, clientID, request.getPlatform()); TokenAuthenticator authenticator = new TokenAuthenticator(); String strToken = authenticator.generateToken(fromUser); String result = strToken + "|" + session.getSecret() + "|" + session.getDbSecret(); diff --git a/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java b/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java index 5a3fa592..3b94a9ff 100755 --- a/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java @@ -328,16 +328,27 @@ public class MemorySessionStore implements ISessionsStore { } @Override - public Session createUserSession(String username, String clientID, int platform) { + public Session updateOrCreateUserSession(String username, String clientID, int platform) { LOG.debug("createUserSession for client <{}>, user <{}>", clientID, username); - ClientSession clientSession = new ClientSession(clientID, this); - Session session = databaseStore.getSession(username, clientID, clientSession); + Session session = sessions.get(clientID); - if (session == null) { - session = databaseStore.createSession(username, clientID, clientSession, platform); + if (session == null || !session.username.equals(username)) { + if (session != null && !session.username.equals(username)) { + if (userSessions.get(username) != null) { + userSessions.get(username).remove(clientID); + } + } + ClientSession clientSession = new ClientSession(clientID, this); + session = databaseStore.getSession(username, clientID, clientSession); + + if (session == null) { + session = databaseStore.createSession(username, clientID, clientSession, platform); + } + sessions.put(clientID, session); } + if (session.getDeleted() > 0) { session.setDeleted(0); databaseStore.updateSessionDeleted(username, clientID, 0); diff --git a/broker/src/main/java/io/moquette/spi/ISessionsStore.java b/broker/src/main/java/io/moquette/spi/ISessionsStore.java index 0cde7d9e..9f3a6697 100755 --- a/broker/src/main/java/io/moquette/spi/ISessionsStore.java +++ b/broker/src/main/java/io/moquette/spi/ISessionsStore.java @@ -38,7 +38,7 @@ public interface ISessionsStore { */ boolean contains(String clientID); - Session createUserSession(String username, String clientID, int platform); + Session updateOrCreateUserSession(String username, String clientID, int platform); ErrorCode loadActiveSession(String username, String clientID);