用java写敏感词过滤器的代码
用java写敏感词过滤器的代码
这里采用动态代理,所以要创建proxy代理对象,利用代理,来增强某些方法(getParameter方法、getParameterMap方法、getParameterValues方法)
@WebFilter("/*")
public class SensitiveWordsFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {//1.创建代理对象,增强getParameter方法ServletRequest proxy_req = (ServletRequest) Proxy.newProxyInstance(req.getClass().getClassLoader(), req.getClass().getInterfaces(),new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//增强getParameter方法if (method.getName().equals("getParameter")){//增强返回值//获取返回值String value=(String) method.invoke(req, args);if (value!=null){for (String s : list) {if (value.contains(s)){value=value.replaceAll(s, "***");}}}return value;}//判断方法名是否是getParameterMapif (method.getName().equals("getParameterMap")){Map<String, String[]> map=(Map<String, String[]>) method.invoke(req, args);Map<String,String[]> newMap=new HashMap<>();for (String key : map.keySet()) {String[] values = map.get(key);List<String> sb=new ArrayList<>();for (String value : values) {if (value!=null){for (String s : list) {if (value.contains(s)){value=value.replaceAll(s, "***");}}sb.add(value);}}String[] sBuffer=new String[values.length];newMap.put(key, (String[]) sb.toArray(sBuffer));}return newMap;}//判断方法名是否是getParameterValuesif (method.getName().equals("getParameterValues")){String[] values=(String[])method.invoke(req, args);List<String> newlist=new ArrayList<>();if (values!=null){for (String value : values) {if (value!=null){for (String s : list) {if (value.contains(s)) {value = value.replaceAll(s, "***");}}}newlist.add(value);}}String[] sBuffer=new String[newlist.size()];String[] newStr=newlist.toArray(sBuffer);//这里要这样写,因为toArray在转型的时候要加参数,长度就是你要转型的类型长度return newStr;}return method.invoke(req, args);}});//2.放行chain.doFilter(proxy_req, resp);}private List<String> list=new ArrayList<>();//敏感词汇集合public void init(FilterConfig config) throws ServletException {try{//加载文件(获取文件的真实路径)ServletContext servletContext = config.getServletContext();String realPath = servletContext.getRealPath("/WEB-INF/classes/敏感词汇.txt");//读取文件BufferedReader br=new BufferedReader(new FileReader(realPath));//将文件的每一行数据添加到list中String line=null;while ((line=br.readLine())!=null){list.add(line);}br.close();System.out.println(list);}catch (Exception e){e.printStackTrace();}}}
测试代码
@WebServlet("/testServlet")
public class TestServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");/*String name = request.getParameter("name");String msg = request.getParameter("msg");System.out.println(name+":"+msg);*//*Map<String, String[]> map = request.getParameterMap();for (String key : map.keySet()) {String[] values = map.get(key);for (String value : values) {System.out.println(key+":"+value);}}*/String[] hobby = request.getParameterValues("hobby");for (String s : hobby) {System.out.println(s);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}
其中注释的代码是用来测试前面2段代码的功能(getParameter方法、getParameterMap方法),后面那段代码是用来测试getParameterValues方法。
用java写敏感词过滤器的代码相关推荐
- JAVA -敏感词过滤器 工具类SensitiveFilter
1.添加敏感词过滤工具类 类1: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStre ...
- 【前缀树】写一个敏感词过滤器
1.什么是敏感词过滤 这其实是一个很常见的功能,随处可见以至于你可能都没关注过,基本上在有评论的地方都会有它的身影. 举例来说,你打游戏和别人对喷的时候,是不是一些脏话发不出去哈哈,这些词汇会用*** ...
- python敏感词过滤代码简单代码,Python学习笔记系列——读写文件以及敏感词过滤器的实现...
一.读文件 #打开文件,传入文件名和标识符,r代表读 f= open('\\Users\ZC\Desktop\zc.txt','r') #调用read方法一次性读取文件的全部内容,存入内存,用str对 ...
- flex java 全局拦截_flex + java 过滤敏感词
过滤敏感词这个相对比较容易做到,网上也很多方法,看得比较多的一个方法就是:把所有的敏感词写入到一个properties文件中,程序启动时拼成一个正则表达式.这个也只是比较基础的敏感词过滤器,比较强大的 ...
- 用前缀树实现中文敏感词过滤器
文章目录 前言 运行环境 过滤器源码 过滤器测试类 前言 本文代码实现一个中文的敏感词过滤器,预先将准备好的敏感词写入前缀树数据结构中实现快速检索,并且节省内存.一般用于检查注册用户名称.言论是否包含 ...
- 直播代码中关于敏感词替换的代码编辑
想要在直播代码中实现字符串过滤的方式有很多种,每种编程语言都有相应的处理方式,且因语言不同,其所使用的函数也有所不同,但最终的目的都是为达到用户的绿色上网.安全上网,呈现给用户一种安全舒适的上网环境. ...
- 用js模拟一个简单敏感词过滤器
1.用js模拟一个简单敏感词过滤器 (用户输入的内容中的敏感词替换为*) 例:"今天有个傻子在旁边大喊大叫,影响了我的操作.", 过滤后:"今天有个在旁边大喊大叫,影响了 ...
- Java实现敏感词过滤 - IKAnalyzer中文分词工具
IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包. 官网: https://code.google.com/archive/p/ik-analyzer/ 本用例借助 I ...
- 敏感词过滤器 filter
敏感词过滤器 filter /*** 敏感词过滤器*/ public class SensitiveWordsFilter implements Filter {// 敏感词列表private Str ...
最新文章
- 【html、CSS、javascript-8】JavaScript作用域
- Spring Boot 2.x基础教程:使用EhCache缓存集群
- 使用JNDI+连接池
- 如何远程链接linux服务器,如何远程登陆Linux/Windows服务器
- ALGO-117_蓝桥杯_算法训练_友好数
- js对象数组转java对象数组对象数组对象数组对象,前台js数组json字符串,后台json转为对象数组的具体实现...
- ASP.NET Core和json请求这样用真简单,axios、微信小程序得救了
- Tomcat无需输入项目名,直接用域名访问项目
- python for循环连续输入五个成绩判断等级_Python基础(1)——输入输出/循环/条件判断/基本数据类型...
- 丢瓶盖(洛谷-P1316)
- pythonseleniumide使用_selenium第二课(脚本录制seleniumIDE的使用)
- 《Android Studio开发实战 从零基础到App上线》源码运行问题解答
- C3P0连接池配置方式
- 和菜鸟一起学android4.0.3源码之lcd屏幕背光调节
- Python 根据百度 API 获得经纬度,根据经纬度计算城市间距离
- 昆仑固件系统u盘引导_系统 | 把 Grub 安装到 U 盘上 / 重建 Grub 引导
- ansys--workbench(导入solidworks)受力分析
- iOS-常用的第三方库以及实例
- 利用记事本编写html代码和word实现A4信笺纸(信签纸)电子版的两种设计法
- HTML5+CSS3基础响应式页面布局