From 16deebb565fbf393b05670a6e6aa90cb7405605c Mon Sep 17 00:00:00 2001 From: "heavyrain.lee" Date: Sat, 25 Apr 2020 20:34:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=98=AF=E5=90=A6=E7=A6=81?= =?UTF-8?q?=E6=AD=A2=E6=9C=8D=E5=8A=A1=E5=99=A8=E7=AB=AF=E4=BF=9D=E5=AD=98?= =?UTF-8?q?searchable=5Fcontent=E5=AD=97=E6=AE=B5=E7=9A=84=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- broker/config/wildfirechat.conf | 3 ++ .../java/io/moquette/BrokerConstants.java | 1 + .../moquette/persistence/DatabaseStore.java | 37 ++++++++++++++----- .../persistence/MemoryMessagesStore.java | 6 +++ .../src/main/resources/wildfirechat.conf | 3 ++ 5 files changed, 41 insertions(+), 9 deletions(-) diff --git a/broker/config/wildfirechat.conf b/broker/config/wildfirechat.conf index 9329b3ea..3386e59d 100755 --- a/broker/config/wildfirechat.conf +++ b/broker/config/wildfirechat.conf @@ -71,6 +71,9 @@ message.disable_stranger_chat false ##所有命中敏感词的消息都会被记录在敏感词消息表中 message.blacklist.strategy 0 +##是否禁止服务器端消息搜索,该功能暂未实现。目前的影响是如果打开,则存储消息时不单独保存_searchable_content字段 +message.disable_remote_search false + ##禁止搜索用户 friend.disable_search false diff --git a/broker/src/main/java/io/moquette/BrokerConstants.java b/broker/src/main/java/io/moquette/BrokerConstants.java index 4fa39ad2..f4d4e24a 100755 --- a/broker/src/main/java/io/moquette/BrokerConstants.java +++ b/broker/src/main/java/io/moquette/BrokerConstants.java @@ -139,6 +139,7 @@ public final class BrokerConstants { public static final String CHATROOM_Participant_Idle_Time = "chatroom.participant_idle_time"; public static final String CHATROOM_Rejoin_When_Active = "chatroom.rejoin_when_active"; + public static final String MESSAGES_DISABLE_REMOTE_SEARCH = "message.disable_remote_search"; private BrokerConstants() { } diff --git a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java index d17ef94c..e64294f7 100644 --- a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java +++ b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java @@ -39,6 +39,10 @@ import static cn.wildfirechat.proto.ProtoConstants.SearchUserType.*; public class DatabaseStore { private static final Logger LOG = LoggerFactory.getLogger(DatabaseStore.class); private final ThreadPoolExecutorWrapper mScheduler; + private boolean disableRemoteMessageSearch = false; + public void setDisableRemoteMessageSearch(boolean disableRemoteMessageSearch) { + this.disableRemoteMessageSearch = disableRemoteMessageSearch; + } public DatabaseStore(ThreadPoolExecutorWrapper scheduler) { this.mScheduler = scheduler; @@ -493,13 +497,24 @@ public class DatabaseStore { PreparedStatement statement = null; try { connection = DBUtil.getConnection(); - String sql = "insert into " + MessageShardingUtil.getMessageTable(message.getMessageId()) + - " (`_mid`, `_from`, `_type`, `_target`, `_line`, `_data`, `_searchable_key`, `_dt`, `_content_type`, `_to`) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" + - " ON DUPLICATE KEY UPDATE " + - "`_data` = ?," + - "`_searchable_key` = ?," + - "`_dt` = ?," + - "`_content_type` = ?"; + String table = MessageShardingUtil.getMessageTable(message.getMessageId()); + String sql; + if (disableRemoteMessageSearch) { + sql = "insert into " + table + + " (`_mid`, `_from`, `_type`, `_target`, `_line`, `_data`, `_dt`, `_content_type`, `_to`) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" + + " ON DUPLICATE KEY UPDATE " + + "`_data` = ?," + + "`_dt` = ?," + + "`_content_type` = ?"; + } else { + sql = "insert into " + table + + " (`_mid`, `_from`, `_type`, `_target`, `_line`, `_data`, `_searchable_key`, `_dt`, `_content_type`, `_to`) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" + + " ON DUPLICATE KEY UPDATE " + + "`_data` = ?," + + "`_searchable_key` = ?," + + "`_dt` = ?," + + "`_content_type` = ?"; + } String searchableContent = message.getContent().getSearchableContent() == null ? "" : message.getContent().getSearchableContent(); @@ -513,7 +528,9 @@ public class DatabaseStore { Blob blob = connection.createBlob(); blob.setBytes(1, message.getContent().toByteArray()); statement.setBlob(index++, blob); - statement.setString(index++, searchableContent); + if (!disableRemoteMessageSearch) { + statement.setString(index++, searchableContent); + } statement.setTimestamp(index++, new Timestamp(message.getServerTimestamp())); statement.setInt(index++, message.getContent().getType()); String to = message.getToUser(); @@ -525,7 +542,9 @@ public class DatabaseStore { statement.setString(index++, to); statement.setBlob(index++, blob); - statement.setString(index++, searchableContent); + if (!disableRemoteMessageSearch) { + statement.setString(index++, searchableContent); + } statement.setTimestamp(index++, new Timestamp(message.getServerTimestamp())); statement.setInt(index++, message.getContent().getType()); diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index dd042388..7009da80 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -219,6 +219,12 @@ public class MemoryMessagesStore implements IMessagesStore { Utility.printExecption(LOG, e); printMissConfigLog(CHATROOM_Participant_Idle_Time, mChatroomParticipantIdleTime + ""); } + + try { + boolean disableRemoteMessageSearch = Boolean.parseBoolean(m_Server.getConfig().getProperty(BrokerConstants.MESSAGES_DISABLE_REMOTE_SEARCH, "false")); + databaseStore.setDisableRemoteMessageSearch(disableRemoteMessageSearch); + } catch (Exception e) { + } } private void printMissConfigLog(String config, String defaultValue) { diff --git a/distribution/src/main/resources/wildfirechat.conf b/distribution/src/main/resources/wildfirechat.conf index 2aef57e9..a76c8e08 100755 --- a/distribution/src/main/resources/wildfirechat.conf +++ b/distribution/src/main/resources/wildfirechat.conf @@ -62,6 +62,9 @@ message.disable_stranger_chat false ##所有命中敏感词的消息都会被记录在敏感词消息表中 message.blacklist.strategy 0 +##是否禁止服务器端消息搜索,该功能暂未实现。目前的影响是如果打开,则存储消息时不单独保存_searchable_content字段 +message.disable_remote_search false + ##禁止搜索用户 friend.disable_search false