From bae0805e64155597eadc7d5c0de36c0c80778de8 Mon Sep 17 00:00:00 2001 From: heavyrain2012 Date: Tue, 1 Sep 2020 21:52:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E7=94=A8=E6=88=B7=E6=97=B6?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E7=94=A8=E6=88=B7=E7=9A=84=E6=9C=89=E6=95=88?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../moquette/persistence/DatabaseStore.java | 27 +++++++++++++++++++ .../persistence/MemoryMessagesStore.java | 3 +++ .../main/java/cn/wildfirechat/sdk/Main.java | 2 ++ 3 files changed, 32 insertions(+) diff --git a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java index 4e3f01f1..daff313e 100644 --- a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java +++ b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java @@ -2186,6 +2186,33 @@ public class DatabaseStore { } }); } + + boolean isUidAndNameConflict(String uid, String name) { + Connection connection = null; + PreparedStatement statement = null; + ResultSet rs = null; + long start = System.currentTimeMillis(); + try { + connection = DBUtil.getConnection(); + String sql = "select _uid from t_user where _name = ? and _uid <> ? limit 1"; + statement = connection.prepareStatement(sql); + statement.setString(1, name); + statement.setString(2, uid); + rs = statement.executeQuery(); + if (rs.next()) { + String conflictId = rs.getString(1); + LOG.error("user {} already have name {} !!!", conflictId, name); + return true; + } + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + Utility.printExecption(LOG, e); + } finally { + DBUtil.closeDB(connection, statement, rs); + } + return false; + } void updateUser(final WFCMessage.User user) throws Exception { LOG.info("Database update user info {} {}", user.getUid(), user.getUpdateDt()); diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 0b82a4fe..c6eeba83 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -1783,6 +1783,9 @@ public class MemoryMessagesStore implements IMessagesStore { public void addUserInfo(WFCMessage.User user, String password) throws Exception { HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); IMap mUserMap = hzInstance.getMap(USERS); + if (databaseStore.isUidAndNameConflict(user.getUid(), user.getName())) { + throw new Exception("用户名不能重复,必须唯一!!!"); + } databaseStore.updateUser(user); mUserMap.put(user.getUid(), user); databaseStore.updateUserPassword(user.getUid(), password); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/Main.java b/sdk/src/main/java/cn/wildfirechat/sdk/Main.java index 3ef70059..e306fbe6 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/Main.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/Main.java @@ -52,7 +52,9 @@ public class Main { //*********************************************** static void testUser() throws Exception { InputOutputUserInfo userInfo = new InputOutputUserInfo(); + //用户ID,必须保证唯一性 userInfo.setUserId("userId1"); + //用户名,一般是用户登录帐号,也必须保证唯一性。也就是说所有用户的userId必须不能重复,所有用户的name必须不能重复,但可以同一个用户的userId和name是同一个,一般建议userId使用一个uuid,name是"微信号"且可以修改, userInfo.setName("user1"); userInfo.setMobile("13900000000"); userInfo.setDisplayName("user 1");