博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springMVC+shiro 实现敏感词过滤 (spring boot 也可以参考)
阅读量:6619 次
发布时间:2019-06-25

本文共 4714 字,大约阅读时间需要 15 分钟。

  hot3.png

一、在web系统中难免会出现输入的数据中包含敏感词,这是可以有三种做法 

        1、把敏感词高亮显示

        2、禁止提交,提示内容中包含敏感词

        3、把敏感词转化为****

二、利用word-search这个算法实现敏感词的查找和定位 ,shiro实现拦截过滤

       附:word-search百度云盘地址:链接: 提取码:t4dv 

 

三、实现过程

1、敏感词文件,文件中包含要过滤的敏感词,每个词语用英文逗号隔开:例(aaa,bbb,cc)

2、SensitiveWords  读取本地的敏感词文件

import java.io.BufferedReader;import java.io.FileInputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import com.shiro.oauth.util.Constans;import com.tfc.analysis.KWSeeker;import com.tfc.analysis.entity.Keyword;import com.tfc.analysis.fragment.HTMLFragment;import com.tfc.analysis.process.WordFinder;public class SensitiveWords {    //本地敏感词文件的路径  根据自己的项目自行修改	private static  String sensitiveWordsFilePath=Constans.WEBAPP_PATH+"/commonfile/sensitivewords.txt";	    public static List
list=new ArrayList
(); static{ BufferedReader br; String words=""; try { br = new BufferedReader(new InputStreamReader(new FileInputStream(sensitiveWordsFilePath),"gbk")); String line = null; while ((line = br.readLine()) != null) { words+=line; } String[] every=words.split(","); for(int i=0;i
0){ return true; } return false; } public String findWords(String content){ KWSeeker kw1 = KWSeeker.getInstance(list); // 使用默认的高亮方式将文本中含有上面指定的所有词显示出来! kw1.highlight("这是test1,要注意哦!"); // 使用HTML页面加粗的高亮方式将文本中含有上面指定的所有词显示出来! kw1.highlight("这是test2,要注意哦!", new HTMLFragment("
", "")); // 找出文本中所有含有上面词库中的词! kw1.findWords("这是test1,要注意哦!test2"); // 使用指定的processor(如:WordFinder找出文本中所有含有上面词库中的词)对文本进行处理! kw1.process(new WordFinder(), "这是test1,要注意哦!", null); return kw1.highlight(content); } }

3、SensitivewordsExecption  异常类

import org.apache.shiro.ShiroException;public class SensitivewordsExecption extends ShiroException {	/**	 * 	 */	private static final long serialVersionUID = 1L;	public SensitivewordsExecption() {};	public SensitivewordsExecption (String msg){		super(msg);	}}

4、SensitiveWordsFilter  自定义敏感词过滤器(重点!!)

该过滤器继承PathMatchingFilter过滤器,对shiro过滤器不清楚的可以看一下详细的介绍  这里就不介绍了。上代码

import java.io.UnsupportedEncodingException;import java.util.Enumeration;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import net.sf.json.JsonConfig;import net.sf.json.util.CycleDetectionStrategy;import org.apache.commons.lang.StringUtils;import org.apache.shiro.ShiroException;import org.apache.shiro.web.filter.PathMatchingFilter;public class SensitiveWordsFilter extends PathMatchingFilter {	@Override	public  boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws ShiroException {		HttpServletRequest req=(HttpServletRequest) request;		try {			req.setCharacterEncoding("UTF-8");		} catch (UnsupportedEncodingException e1) {			e1.printStackTrace();		}        //获取		String strPath=req.getRequestURL().toString();		String queryString = req.getQueryString();				SensitiveWords sensitiveWords=new SensitiveWords();		        //路径当中是否包含敏感词		if(sensitiveWords.haveWords(strPath.toLowerCase())){			throw new SensitivewordsExecption("你输入的内容中存在敏感词");		}        //get请求参数中是否包含敏感词		if(StringUtils.isNotEmpty(queryString)){			if(sensitiveWords.haveWords(queryString.toLowerCase())){				throw new SensitivewordsExecption("你输入的内容中存在敏感词");			}  		}		//post请求中是否包含敏感词		Enumeration
enuma=req.getParameterNames(); for(Enumeration
e=enuma;enuma.hasMoreElements();){ String thisName=e.nextElement().toString(); String thisValue=request.getParameter(thisName); if(sensitiveWords.haveWords(thisValue.toLowerCase())||sensitiveWords.haveWords(thisName.toLowerCase())){ throw new SensitivewordsExecption("你输入的内容中存在敏感词"); } } return true; }}

5、shiro的xml文件配置

/css/** = anon /fonts/** = anon /js/** = anon /images/** = anon /sysImages/** = anon /front/**= anon /login = authc /logout = logout /captcha = anon
/saveContent=sensitiveWords,authc /back/** = authc

6、对敏感词过滤器抛出的SensitivewordsExecption进行捕捉处理

       
com.shiro.security.SensitivewordsExecption
       
/WEB-INF/view/error/words.html

 

简单的实现了shiro敏感词过滤拦截,具体情况可以按照实际的业务需求进行处理。

 

转载于:https://my.oschina.net/momei/blog/3004859

你可能感兴趣的文章
Android 富文本框实现 RichEditText
查看>>
localtime 和 localtime_r
查看>>
多媒体开发之---h264 NALU 语法结构
查看>>
腾讯游戏分享汇:天天飞车六大研发经验
查看>>
25. Reverse Nodes in k-Group
查看>>
SecureCRT 6.7.1 注冊机 和谐 破解 补丁 方法
查看>>
async & await 的前世今生(Updated)
查看>>
MySql中时间类型总结
查看>>
[Javascript] Array methods in depth - slice
查看>>
JDBC中事务的使用
查看>>
oc-03-OC访问OC源文件、C源文件中的函数
查看>>
Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer
查看>>
【框架】Vitamio多媒体播放器
查看>>
UIAlertController 使用
查看>>
WPF 之 style文件的引用
查看>>
淘宝WAP版小BUG分析
查看>>
XZ压缩
查看>>
AChartEngine使用View显示图表
查看>>
JAVA 根据经纬度算出附近的正方形的四个角的经纬度
查看>>
Servlet处理get请求时的中文乱码问题
查看>>