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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值