前言
sensitive-word-admin 最初的定位是讓大家知道如何使用 sensitive-word,所以開始想做個簡單的例子。
不過秉持著把一個工具做好的原則,也收到很多小伙伴的建議。
v2.0.0 在 ruoyi-vue(也非常感謝若依作者多年來的無私奉獻) 的基礎之上,對整體 UI 進行重構。
為了實現一個讓用戶可以開箱就用的敏感詞控臺。
項目介紹
平臺簡介
sensitive-word-admin 是和 sensitive-word 配套使用的控臺。
- 前端采用Vue、Element UI。
- 后端采用Spring Boot、Spring Security、Redis & Jwt。
- 權限認證使用Jwt,支持多終端認證系統。
- 支持加載動態權限菜單,多方式輕松權限控制。
- 高效率開發,使用代碼生成器可以一鍵生成前后端代碼。
拓展閱讀
sensitive-word-admin 敏感詞控臺 v1.2.0 版本開源
sensitive-word 基于 DFA 算法實現的高性能敏感詞工具介紹
特性
-
基本的 CRUD
-
敏感詞修改實時生效
變更日志
本地啟動
依賴
redis
mysql
node
后端
2)執行 mysql 腳本
登錄 mysql
清空庫(謹慎操作,別清空了以前的數據)
use test;
drop database sensitive_word;
創建庫
create database sensitive_word;
use sensitive_word;
執行 sql 下的 init.sql
+ sensitive_word.sql
3)修改配置
application-druid.yml
調整一下數據庫鏈接+賬戶密碼
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: com.mysql.cj.jdbc.Driverdruid:# 主庫數據源master:url: jdbc:mysql://localhost:3306/sensitive_word?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8username: rootpassword: PASSWORD
運行 SpringBootApplication#main()
前端
cd admin-ui
npm install --registry=https://registry.npm.taobao.org
npm run dev
登錄
打開瀏覽器,輸入:http://localhost:80 (默認賬戶 admin/admin123)
敏感詞基本管理
你可以在敏感詞管理菜單,進行管理。
API
ApiSensitiveWordController 中包含對應的 api 方法,后續可以添加驗簽等校驗。
接口列表
api | 入參 | 出參 | 說明 |
---|---|---|---|
/api/sensitiveWord/contains | string | boolean | 是否包含敏感詞 |
/api/sensitiveWord/findAll | string | List<String> | 獲取所有的敏感詞 |
/api/sensitiveWord/findFist | string | string | 獲取第一個的敏感詞 |
/api/sensitiveWord/replace | string | string | 獲取替換后的結果 |
/api/sensitiveWord/tags | string | Set<String> | 獲取敏感詞的標簽列表 |
接口驗證
token
我們登錄之后,可以獲取到對應的 token。
比如我們打開【系統工具】-【系統接口】,任意找一個接口,看一下對應的 Authorization
比如這里就是
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiYzBjMmY0MWQtMjliMS00YzlkLWI2ZmMtNDhlZTk4MGIwZjJjIn0.67qpqIndfAd4J769ny1jqq8kEnATE9u5DbjJoMpbiMCSvAg2WaBV0b4nBjo5UxKVqcqbYgmnIN4gUi3AP2p6uw
swagger 認證
然后點擊綠色認證按鈕認證一下,輸入上面的 token。
就可以想基本的 swagger 一樣驗證接口。
curl 請求
你可以本地直接 curl
curl -X GET "http://localhost:80/dev-api/api/sensitiveWord/tags?text=%E4%BA%8C%E5%8D%81%E5%85%AB%E7%94%BB%E7%94%9F" -H "accept: */*" -H "Authorization: eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiYzBjMmY0MWQtMjliMS00YzlkLWI2ZmMtNDhlZTk4MGIwZjJjIn0.67qpqIndfAd4J769ny1jqq8kEnATE9u5DbjJoMpbiMCSvAg2WaBV0b4nBjo5UxKVqcqbYgmnIN4gUi3AP2p6uw"
結果:
{"respCode": "0000","respMessage": "成功","result": ["偉人","畫家"]
}
如何自定義標簽
自定義單詞 TAG
我們在配置中指定:
@Configuration
public class SensitiveWordConfig {@Autowiredprivate MyDdWordAllow myDdWordAllow;@Autowiredprivate MyDdWordDeny myDdWordDeny;/*** 自定義單詞標簽** @since v1.4.0*/@Autowiredprivate MyDdWordTags myDdWordTags;/*** 初始化引導類* @return 初始化引導類* @since 1.0.0*/@Beanpublic SensitiveWordBs sensitiveWordBs() {return SensitiveWordBs.newInstance().wordAllow(WordAllows.chains(WordAllows.defaults(), myDdWordAllow)).wordDeny(WordDenys.chains(WordDenys.defaults(), myDdWordDeny)).wordTag(myDdWordTags)// 各種其他配置.init();}}
MyDdWordTags 自定義實現
MyDdWordTags 是一個實現的例子:
核心分為兩步:
1)根據【標簽單詞映射表】獲取單詞對應的標簽編碼(tag_code) 列表
2)根據【標簽表】中的 tag_code 去查詢對應的 標簽描述(tag_label) 列表
所以需要分別配置二者,然后進行關聯。
SELECT DISTINCT
mapping.word AS word,
tag.tag_label AS tagLabel
FROM word_tag_mapping mapping
INNER JOIN tag tag ON mapping.tag_code = tag.tag_code
WHERE tag.status = 'Y'
road-map
當然,v2.0.0 出版的能力還比較欠缺,用戶體驗還是不夠友好。
感興趣的小伙伴也可以針對下面的需求進行 PR,歡迎一起交流。
如果你有需求,可以去這里issues
待改進點
- 單個詞的修改實時生效
- word/tags 的修改,增量的變化,而不是全量
- word-tag 的處理,改為枚舉映射,而不是手動輸入
- 限定接入系統 appKey appSecret
- 系統的調用記錄
- 數據大盤
[ ] word 操作時對應的日志表,有必要存在嗎?(可以不保留,ruoyi 本身就有操作日志)
技術鳴謝
- 感謝 ruoyi-vue 的無私奉獻
拓展閱讀
sensitive-word-admin v1.3.0 發布 如何支持分布式部署?
sensitive-word-admin 敏感詞控臺 v1.2.0 版本開源
sensitive-word 基于 DFA 算法實現的高性能敏感詞工具介紹
更多技術交流
開源矩陣
sensitive-word 敏感詞
pinyin 漢字轉拼音
pinyin2hanzi 拼音轉漢字
segment 高性能中文分詞
opencc4j 中文繁簡體轉換
nlp-hanzi-similar 漢字相似度
word-checker 拼寫檢測
參考資料
https://github.com/houbb/sensitive-word-admin