Browse Source

修复html过滤导致的bug

master
xie.bx 2 years ago
parent
commit
1644a54eb1
  1. 5
      im-commom/pom.xml
  2. 6
      im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java
  3. 14
      im-ui/src/components/chat/ChatBox.vue

5
im-commom/pom.xml

@ -59,11 +59,6 @@
<artifactId>java-jwt</artifactId> <artifactId>java-jwt</artifactId>
<version>3.11.0</version> <version>3.11.0</version>
</dependency> </dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.1.2-jre</version>
</dependency>
<!-- slf4j --> <!-- slf4j -->
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>

6
im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java

@ -2,7 +2,7 @@ package com.bx.implatform.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -73,7 +73,7 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
msg.setSendTime(new Date()); msg.setSendTime(new Date());
msg.setSendNickName(member.getAliasName()); msg.setSendNickName(member.getAliasName());
if (CollUtil.isNotEmpty(dto.getAtUserIds())) { if (CollUtil.isNotEmpty(dto.getAtUserIds())) {
msg.setAtUserIds(CharSequenceUtil.join(",", dto.getAtUserIds())); msg.setAtUserIds(StrUtil.join(",", dto.getAtUserIds()));
} }
this.save(msg); this.save(msg);
// 群发 // 群发
@ -207,7 +207,7 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
sendMessage.setSendResult(true); sendMessage.setSendResult(true);
imClient.sendGroupMessage(sendMessage); imClient.sendGroupMessage(sendMessage);
// 记录已读消息位置 // 记录已读消息位置
String key = CharSequenceUtil.join(":", RedisKey.IM_GROUP_READED_POSITION, groupId, session.getUserId()); String key = StrUtil.join(":", RedisKey.IM_GROUP_READED_POSITION, groupId, session.getUserId());
redisTemplate.opsForValue().set(key, message.getId()); redisTemplate.opsForValue().set(key, message.getId());
} }

14
im-ui/src/components/chat/ChatBox.vue

@ -47,7 +47,7 @@
<div title="聊天记录" class="el-icon-chat-dot-round" @click="showHistoryBox()"></div> <div title="聊天记录" class="el-icon-chat-dot-round" @click="showHistoryBox()"></div>
</div> </div>
<div class="send-content-area"> <div class="send-content-area">
<div contenteditable="true" v-show="!sendImageUrl" id="inputText" ref="editBox" class="send-text-area" <div contenteditable="true" v-show="!sendImageUrl" ref="editBox" class="send-text-area"
:disabled="lockMessage" @paste.prevent="onEditorPaste" :disabled="lockMessage" @paste.prevent="onEditorPaste"
@compositionstart="onEditorCompositionStart" @compositionstart="onEditorCompositionStart"
@compositionend="onEditorCompositionEnd" @input="onEditorInput" @compositionend="onEditorCompositionEnd" @input="onEditorInput"
@ -221,7 +221,7 @@
let sendText = "" let sendText = ""
this.$refs.editBox.childNodes.forEach((node) => { this.$refs.editBox.childNodes.forEach((node) => {
if (node.nodeName == "#text") { if (node.nodeName == "#text") {
sendText = document.getElementById("inputText").innerHTML; sendText += this.html2Escape(node.textContent);
} else if (node.nodeName == "SPAN") { } else if (node.nodeName == "SPAN") {
sendText += node.innerText; sendText += node.innerText;
} else if (node.nodeName == "IMG") { } else if (node.nodeName == "IMG") {
@ -230,6 +230,16 @@
}) })
return sendText; return sendText;
}, },
html2Escape(strHtml) {
return strHtml.replace(/[<>&"]/g, function(c) {
return {
'<': '&lt;',
'>': '&gt;',
'&': '&amp;',
'"': '&quot;'
}[c];
});
},
createAtUserIds() { createAtUserIds() {
let ids = []; let ids = [];
this.$refs.editBox.childNodes.forEach((node) => { this.$refs.editBox.childNodes.forEach((node) => {

Loading…
Cancel
Save