这里面须要用到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>