這裏面須要用到Pattern和matcher兩個類中提供的方法,代碼以下:java
public boolean containsSensitiveWords(String content) { logger.info("The method containsSensitiveWords check start:"); logger.info("The content:" + content); boolean result = false; // 取得全部敏感詞 //String sensitiveWords = redisClient.get(RedisConstants.ZR_SENSITIVE_WORDS); String sensitiveWords=null; if(StringUtils.isEmpty(sensitiveWords)){ // 若是未取到,從數據庫讀取 sensitiveWords = getAllSensitiveWordsFromDB(); } //logger.info("The all:" + sensitiveWords); // 若是取到了設置的敏感詞,執行校驗 if(!StringUtil.isNullOrBlank(sensitiveWords)){ Pattern pattern = Pattern.compile(sensitiveWords); Matcher matcher = pattern.matcher(content); if (matcher.find()) { result = true; } } logger.info("The result:" + result); return result; }
從數據庫中獲取全部的敏感詞(敏感詞本身定義),以下:redis
/** * 功能描述: 從數據庫中取得全部的敏感詞,組織表達式返回 */ private String getAllSensitiveWordsFromDB(){ StringBuffer buf = new StringBuffer(); // 查詢數據庫,取得所有敏感詞集合 List<SensitiveWord> wordList = wordDao.queryForList("productReview.getAllSensitiveWords", null, SensitiveWord.class); if(!wordList.isEmpty()){ for(int i=0; i<wordList.size(); i++){ buf.append(wordList.get(i).getWord()); if(i != wordList.size()-1){ buf.append("|"); } } } return buf.toString(); }
從數據庫中取敏感詞的sql語句:sql
<!-- 獲取全部敏感詞 --> <sql id="getAllSensitiveWords"> <![CDATA[ SELECT WORD FROM SENSITIVE_WORD WITH UR ]]> </sql>