index) {
+ this.index = index;
+ }
+
+ public boolean isWhiteWord() {
+ return isWhiteWord;
+ }
+
+ public void setWhiteWord(boolean whiteWord) {
+ isWhiteWord = whiteWord;
+ }
+}
diff --git a/schisandra-cloud-storage-share/schisandra-cloud-storage-share-application/schisandra-cloud-storage-share-application-controller/src/main/java/com/schisandra/share/application/sensitive/WordContext.java b/schisandra-cloud-storage-share/schisandra-cloud-storage-share-application/schisandra-cloud-storage-share-application-controller/src/main/java/com/schisandra/share/application/sensitive/WordContext.java
new file mode 100644
index 0000000..8c47988
--- /dev/null
+++ b/schisandra-cloud-storage-share/schisandra-cloud-storage-share-application/schisandra-cloud-storage-share-application-controller/src/main/java/com/schisandra/share/application/sensitive/WordContext.java
@@ -0,0 +1,257 @@
+//package com.schisandra.share.application.sensitive;
+//
+//import com.alibaba.fastjson.JSON;
+//
+//import com.schisandra.share.common.enums.IsDeletedFlagEnum;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.util.CollectionUtils;
+//
+//import java.util.*;
+//import java.util.concurrent.Executors;
+//import java.util.concurrent.ScheduledExecutorService;
+//import java.util.concurrent.TimeUnit;
+//
+///**
+// * 词库上下文环境
+// *
+// * 初始化敏感词库,将敏感词加入到HashMap中,构建DFA算法模型
+// *
+// * @author minghu.zhang
+// */
+//@SuppressWarnings({"rawtypes", "unchecked"})
+//@Slf4j
+//public class WordContext {
+//
+// /**
+// * 敏感词字典
+// */
+// private final Map wordMap = new HashMap(1024);
+//
+// /**
+// * 是否已初始化
+// */
+// private boolean init;
+//
+// private long addLastId;
+//
+// public WordContext(boolean autoLoad, SensitiveWordsService service) {
+// clearDelData(service);
+// Set black = new HashSet<>();
+// Set white = new HashSet<>();
+// List list = service.list(Wrappers.lambdaQuery().eq(SensitiveWords::getIsDeleted, IsDeletedFlagEnum.UN_DELETED.getCode()));
+// for (SensitiveWords words : list) {
+// if (words.getType() == 1) {
+// black.add(words.getWords());
+// } else {
+// white.add(words.getWords());
+// }
+// }
+// if (CollectionUtils.isNotEmpty(list)) {
+// this.addLastId = list.get(list.size() - 1).getId();
+// }
+// initKeyWord(black, white);
+// if (autoLoad) {
+// reloadWord(service);
+// }
+// }
+//
+// private void clearDelData(SensitiveWordsService service) {
+// LambdaUpdateWrapper remove = Wrappers.lambdaUpdate().eq(SensitiveWords::getIsDeleted, IsDeletedFlagEnum.DELETED.getCode());
+// service.remove(remove);
+// }
+//
+// private void reloadWord(SensitiveWordsService service) {
+//
+// // 创建一个单线程的定时线程池
+// ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
+// // 创建一个Runnable任务
+// Runnable task = () -> {
+// try {
+// addNewWords(service);
+// removeDelWords(service);
+// } catch (Exception e) {
+// log.error("Sensitive words task error", e);
+// }
+// };
+// // 定时执行任务,初始延迟0,之后每分钟执行一次
+// scheduler.scheduleAtFixedRate(task, 0, 1, TimeUnit.MINUTES);
+//
+// }
+//
+// private void removeDelWords(SensitiveWordsService service) {
+// LambdaUpdateWrapper query = Wrappers.lambdaUpdate()
+// .eq(SensitiveWords::getIsDeleted, IsDeletedFlagEnum.DELETED.getCode());
+// List list = service.list(query);
+// if (CollectionUtils.isNotEmpty(list)) {
+// log.info("removeDelWords {}", JSON.toJSON(list));
+// Set black = new HashSet<>();
+// Set white = new HashSet<>();
+// for (SensitiveWords words : list) {
+// if (words.getType() == 1) {
+// black.add(words.getWords());
+// } else {
+// white.add(words.getWords());
+// }
+// }
+// removeWord(black, WordType.BLACK);
+// removeWord(white, WordType.WHITE);
+// }
+// }
+//
+// private void addNewWords(SensitiveWordsService service) {
+// LambdaUpdateWrapper query = Wrappers.lambdaUpdate()
+// .gt(SensitiveWords::getId, addLastId)
+// .eq(SensitiveWords::getIsDeleted, IsDeletedFlagEnum.UN_DELETED.getCode());
+// List list = service.list(query);
+// if (CollectionUtils.isNotEmpty(list)) {
+// log.info("addNewWords {}", JSON.toJSON(list));
+// this.addLastId = list.get(list.size() - 1).getId();
+// Set black = new HashSet<>();
+// Set white = new HashSet<>();
+// for (SensitiveWords words : list) {
+// if (words.getType() == 1) {
+// black.add(words.getWords());
+// } else {
+// white.add(words.getWords());
+// }
+// }
+// addWord(black, WordType.BLACK);
+// addWord(white, WordType.WHITE);
+// }
+// }
+//
+// /**
+// * 获取初始化的敏感词列表
+// *
+// * @return 敏感词列表
+// */
+// public Map getWordMap() {
+// return wordMap;
+// }
+//
+// /**
+// * 初始化
+// */
+// private synchronized void initKeyWord(Set black, Set white) {
+// try {
+// if (!init) {
+// // 将敏感词库加入到HashMap中
+// addWord(black, WordType.BLACK);
+// // 将非敏感词库也加入到HashMap中
+// addWord(white, WordType.WHITE);
+// }
+// init = true;
+// } catch (Exception e) {
+// throw new RuntimeException(e);
+// }
+// }
+//
+// /**
+// * 读取敏感词库,将敏感词放入HashSet中,构建一个DFA算法模型:
+// * 中 = { isEnd = 0 国 = {
+// * isEnd = 1 人 = {isEnd = 0 民 = {isEnd = 1} } 男 = { isEnd = 0 人 = { isEnd = 1 }
+// * } } } 五 = { isEnd = 0 星 = { isEnd = 0 红 = { isEnd = 0 旗 = { isEnd = 1 } } } }
+// */
+// public void addWord(Collection wordList, WordType wordType) {
+// if (CollectionUtils.isEmpty(wordList)) {
+// return;
+// }
+// Map nowMap;
+// Map newWorMap;
+// // 迭代keyWordSet
+// for (String key : wordList) {
+// nowMap = wordMap;
+// for (int i = 0; i < key.length(); i++) {
+// // 转换成char型
+// char keyChar = key.charAt(i);
+// // 获取
+// Object wordMap = nowMap.get(keyChar);
+// // 如果存在该key,直接赋值
+// if (wordMap != null) {
+// nowMap = (Map) wordMap;
+// } else {
+// // 不存在则构建一个map,同时将isEnd设置为0,因为他不是最后一个
+// newWorMap = new HashMap<>(4);
+// // 不是最后一个
+// newWorMap.put("isEnd", String.valueOf(EndType.HAS_NEXT.ordinal()));
+// nowMap.put(keyChar, newWorMap);
+// nowMap = newWorMap;
+// }
+//
+// if (i == key.length() - 1) {
+// // 最后一个
+// nowMap.put("isEnd", String.valueOf(EndType.IS_END.ordinal()));
+// nowMap.put("isWhiteWord", String.valueOf(wordType.ordinal()));
+// }
+// }
+// }
+// }
+//
+// /**
+// * 在线删除敏感词
+// *
+// * @param wordList 敏感词列表
+// * @param wordType 黑名单 BLACk,白名单WHITE
+// */
+// public void removeWord(Collection wordList, WordType wordType) {
+// if (CollectionUtils.isEmpty(wordList)) {
+// return;
+// }
+// Map nowMap;
+// for (String key : wordList) {
+// List