`
daichangfu
  • 浏览: 260326 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java过滤敏感词,读配置文件/动态数据

    博客分类:
  • java
阅读更多
读取:properties 配置文件

import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.Properties;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class KeyWordFilter {
    private static Pattern pattern = null;

    static {
        StringBuffer patternBuf = new StringBuffer();
        try {
            InputStream in = KeyWordFilter.class.getClassLoader().getResourceAsStream("words.properties");
            Properties properties = new Properties();
            properties.load(in);
            
            Enumeration<?> enu = properties.propertyNames();
            while (enu.hasMoreElements()) {
                patternBuf.append((String) enu.nextElement() + "|");    //读取所有properties里的词,以 | 分隔
            }
            
            patternBuf.deleteCharAt(patternBuf.length() - 1);
            
            //默认下,properties文件读取编码: ISO8859-1
            pattern = Pattern.compile(new String(patternBuf.toString().getBytes("ISO8859-1"), "UTF-8"));
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static String doFilter(String str) {
        System.out.println("str:" + str);
        try {
            Matcher m = pattern.matcher(str);
            str = m.replaceAll("**");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return str;
    }
}



读取数据库

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.shangde.edu.dis.domain.DisWord;
import com.shangde.edu.dis.service.IDisWord;

/**
 * 过滤敏感词
 * @author changfu.dai
 *
 */
public class KeyWordFilter {
	
	private IDisWord disWordService;
	private static KeyWordFilter instance = null ;
	private StringBuffer patternBuf = null;
	private Pattern pattern = null;
	
	public static KeyWordFilter getInstance(IDisWord disWordService) {   
		      if (instance == null) {  
		            instance = new KeyWordFilter(disWordService); 
		      }   
		      return instance;   
	}
	
	/**
	 *	更新数据时重新new敏感词过滤对象
	 */
	public void init(){
		creatKeyWords();
	}
	/**
	 * 从数据库初始化正则表达式字符串
	 * @param disWordService 敏感词实现对象
	 */
	public KeyWordFilter(IDisWord disWordService){
		this.disWordService = disWordService;
		init();
	}
	
	/**
	 * 创建和更新关键词正则表达式
	 */
	private void creatKeyWords(){
		patternBuf = new StringBuffer("");
		List<DisWord> dwList = disWordService.getAllDisWord();
		if(dwList.size()>0){
			patternBuf.append("(");
			for (DisWord word : dwList) {
				patternBuf.append(word.getWord()+"|");
			}
			patternBuf.deleteCharAt(patternBuf.length() - 1);
			patternBuf.append(")");
			pattern = Pattern.compile(new String(patternBuf.toString().getBytes()));
		}else{
			pattern = null;
		} 
	}
	
	/**
	 * 过滤敏感词
	 * @param str	要过滤的字符串
	 * @return 	过滤后的字符串
	 */
	public String doFilter(String str) {
		if(pattern!=null&&str!=null){
			Matcher m = pattern.matcher(str);
			str = m.replaceAll("**");
		}
		return str;
	}

}


/*读取数据库的使用方法,使用了 spring 注入*/
//敏感词service action注入
private IDisWord disWordService;
public void setDisWordService(IDisWord disWordService) {
	this.disWordService = disWordService;
}

//方法中调用
//参数:敏感词service对象
KeyWordFilter kw = KeyWordFilter.getInstance(disWordService);

//str过滤后的内容;content要过滤的内容
String str = kw.doFilter(content);

//对敏感词增加或删除时调用  创建最新的单例对象
KeyWordFilter.getInstance(disWordService).init();
分享到:
评论

相关推荐

    高效Java敏感词过滤系统AC自动机算法源码,支持独立部署与集成注册中心

    - 属性配置文件:2个 - IntelliJ IDEA项目文件:2个 - 列表文件:2个 - Maven命令脚本:1个(SensitiveWords/mvnw) 系统特色功能: - 敏感词组合匹配机制,确保高效过滤; - 独立后台管理,实现敏感词的增删查功能...

    基于树莓派和Java的实时敏感词识别系统设计源码

    本实时敏感词识别系统项目基于树莓派和Java开发,包含98个文件,其中36个Java文件,31个XML文件,以及其他相关配置和资源文件。系统利用Python脚本辅助,实现对敏感词的实时识别,并立即提供反馈。用户可通过配套的...

    基于Java的UGC内容过滤架构源码:DFA与贝叶斯学习

    - 文件构成:43个Java源文件,6个XML配置文件,2个Markdown文档,2个properties配置文件,以及其他辅助文件 - 敏感词处理:采用DFA(确定性有限自动机)算法高效处理 - 学习算法:计划使用贝叶斯思想进行机器学习...

    Java 基于springboot高校表白墙社交系统

    Schedule 3 -新增发表问题功能,并防止xss注入以及敏感词过滤 Schedule 4 -新增评论和站内信功能 Schedule 5 -新增点赞和点踩功能,使用Redis实现 Schedule 6 -新增异步消息功能 新增邮件发送组件 Schedule 7 -...

    好玩有趣-Java 高校表白墙社交系统(类似知乎、牛客网)

    Schedule 3 -新增发表问题功能,并防止xss注入以及敏感词过滤 Schedule 4 -新增评论和站内信功能 Schedule 5 -新增点赞和点踩功能,使用Redis实现 Schedule 6 -新增异步消息功能 新增邮件发送组件 Schedule 7 -...

    java8源码-springboot:springboot2实践

    敏感词过滤 代码生成 文件系统 在线预览文件 邮件服务 爬虫 代码生成插件 ##代码即文档## 使用 swagger &lt;groupId&gt;io.springfox&lt;/groupId&gt; &lt;artifactId&gt;springfox-swagger2&lt;/artifactId&gt; ${swagger.version}&lt;/...

    基于SpringBoot-Mybatis的一个二次元的个人博客网站+源代码+文档说明

    * 敏感词的过滤 * 在线编辑html页面 * 邮件回复 # 覆盖的知识点 * SpringBoot * Mybatis * Netty * dropzone * aplayer音乐播放器 * DFA算法 * Pjax * Thymleaf * Spring mail * Redis * Spring 拦截器 ## 项目备注 ...

    开源中国源码

    - 违禁关键词、敏感词过滤设置 - 增加定时任务管理,通过后台设置启动、关闭,执行任务日志 #### 二次开发准备 1. 开发环境要在IDE里装上lombok插件,否则编译器会报错 2. 程序部署建议使用Maven的assembly插件...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    站内搜索、栏目管理、视频播放(完全模仿优酷视频页面)、焦点图、静态页面生成(新浪、搜狐等大型网站普遍采用的技术)、文章管理、无刷新评论、评论的无刷新分页、敏感词过滤、用户管理、友情链接管理、缓存管理、...

    jspBB 论坛(问答)系统 v1.0

    Kotlin是高效、安全的开发语言,100%兼容Java,编译后依旧是class文件,依旧运行在JDK中,无需依赖任何其它环境。Kotlin和Java可以相互调用,开发时可以Java、Kotlin混搭,并不需要全部都用Kotlin。在Android中...

Global site tag (gtag.js) - Google Analytics