Filter的简介
Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

详解可参考Java中的Filter过滤器

Filter的配置
Filter的配置有两种方式
1.注解配置方式:注解配置方式要Servlet3.0才开始提供,使用@WebFilter进行配置
2.使用web.xml进行配置

分享
今天分享是敏感词汇过滤的Filter,代码实现采用的注解配置方式。为了实例方便,此次敏感词汇只用了List数组存储两个,但是在实际的开发中这种方法是不可取的,其他的方法为:可以在src的目录下,建立一个txt文件,文件中存敏感词汇或者直接用将敏感词汇存入数据库(建议使用)

分析
对请求数据进行过滤,需要取出request对象中的parameter,然后在设置parameter,但是request对象的方法中并没有setParameter()方法,因此,我们需要对增强request对象,通过动态代理的方法增强request对象

以下为Filter的代码:
功能:过滤“坏蛋”、“笨蛋”。若发现请求参数中有列出的词汇则把相应的词汇用“***”代替

package filter;import java.io.IOException;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;/*** Servlet Filter implementation class SensitiveWords*/
@WebFilter("/*")
public class SensitiveWords implements Filter {/*** Default constructor. */public SensitiveWords() {// TODO Auto-generated constructor stub}/*** @see Filter#destroy()*/public void destroy() {// TODO Auto-generated method stub}/*** @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)*/public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//     HttpServletRequest req = (HttpServletRequest)request;//代理类的创建ServletRequest proxy_servlet = (ServletRequest) Proxy.newProxyInstance(request.getClass().getClassLoader(), request.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {if(method.getName().equals("getParameter")){String value = (String) method.invoke(request, args);List<String> list =  new ArrayList<String>();list.add("坏蛋");list.add("笨蛋");if(value != null){for(String str:list){if(value.contains(str)){value = value.replaceAll(str, "***");}}  }return value;}// TODO Auto-generated method stubreturn method.invoke(request,args);}});chain.doFilter(proxy_servlet, response);}/*** @see Filter#init(FilterConfig)*/public void init(FilterConfig fConfig) throws ServletException {// TODO Auto-generated method stub}
}

为了测试Filter的正确性,可以建一个TestServlet进行测试

代码如下

package action;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class TestServlet*/
@WebServlet("/testServlet")
public class TestServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public TestServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name = request.getParameter("name");String msg= request.getParameter("msg");System.out.println("name"+name+"msg"+msg);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}}

启动服务器之后直接访问:http://localhost:8080/testServlet?name="坏蛋"&msg="你的是一个笨蛋"

可以看到控制台打印出了过滤后的结果:

Java Filter——敏感词汇过滤相关推荐

  1. Java基于Socket实现聊天、群聊、敏感词汇过滤功能

    首先的话,这个代码主要是我很久以前写的,然后当时还有很多地方没有理解,现在再来看看这份代码,实在是觉得丑陋不堪,想改,但是是真的改都不好改了- 所以,写代码,规范真的很重要. 实现的功能: 用户私聊 ...

  2. 动态代理的分析以及利用动态代理模式进行敏感词汇过滤

    动态代理 增强对象的功能: 设计模式:一些通用的解决固定问题的方式 代理模式 概念: (1). 真实对象:被代理的对象 (2). 代理对象: (3). 代理模式:代理对象代理真实对象,达到增强真实对象 ...

  3. Java实现敏感词过滤双向词库完美跳过24口交换机

    Java实现敏感词过滤jar包3.0版本发布,采用双向词库,当检索语句中敏感词交错在正向词库中时,比较词汇level,如果正向词汇的level大于敏感词的level,则跳过此敏感词.完美过滤,&quo ...

  4. Java实现敏感词过滤

    敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来 ...

  5. 【敏感词汇过滤算法】基于DFA-前缀树的敏感词汇过滤算法(项目实用)

    在敏感词汇过滤这块,不同的算法所造成的性能差异是非常大的,选择一个合适的算法非常重要.因为以前做算法的时候做过类似前缀树的字符串匹配之类的算法,所以一开始就打算用前缀树做的,后面了解了一下DFA的相关 ...

  6. Java实现敏感词过滤 - IKAnalyzer中文分词工具

    IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包. 官网: https://code.google.com/archive/p/ik-analyzer/ 本用例借助 I ...

  7. 优秀博客 --敏感词汇过滤

    2019独角兽企业重金招聘Python工程师标准>>> 敏感词汇过滤 http://www.cnblogs.com/chenssy/p/3751221.html#2966041 树上 ...

  8. PHP敏感词汇过滤SDK(树形结构遍历命中违禁词)

    先介绍一下匹配敏感词原理吧,因为没有工具,画的很糙,有疑问直接联系我.(绿色箭头代表命中敏感词,灰色:未命中) base 确定有穷自动机(DFA)算法 比如说"可以"是敏感词,那么 ...

  9. Filter - 通过拦截器与动态代理实现敏感词汇过滤

    需求:将敏感词汇.txt文件中的词语过滤为 -> "***" 分析: 首先加载文档,将文档中的词汇纳入集合中备用,方便后期比对使用. 使用Proxy动态代理将request对 ...

  10. 敏感词汇过滤(不区分大小写)

    最近项目中,用户评论内容需要屏蔽敏感词汇,从网上总结以下方法,(不区分大小写,如想设置大小写敏感,可以把代码中content..toLowerCase()去掉).具体看代码: 1.读取敏感词汇文档 & ...

最新文章

  1. 【朱-刘算法】【最小树形图】hdu6141 I am your Father!
  2. HDOJ 1070 排序 水
  3. Redis 系列之一
  4. 找到所有小于N的素数
  5. QByteArray怎么转化为QString类型,并且在QLineEdit上面显示出来
  6. 【PM模块】PM模块主数据
  7. 【openlayers】修改源码支持SLD的graphicfill属性
  8. P3188-[HNOI2007]梦幻岛宝珠【背包】
  9. 垃圾收集 java_关于Java垃圾收集
  10. asterisk1.8 拨号方案 mysql存储(动态)
  11. 模板多个列表级联_Excel办公技巧:使用power query快速合并同一工作簿的多个工作表...
  12. linux 一个读写锁的使用异常导致的故障
  13. aws搭建深度学习gpu_选择合适的GPU进行AWS深度学习
  14. Java工程师历年企业笔试真题汇总
  15. 爬虫---涨跌停股票池信息----(东方财富)
  16. 词性标注英文简称及分类
  17. 51单片机-LCD12864液晶屏
  18. 大明:讲解硬盘ESP分区和MSR分区有什么用?值得收藏
  19. php 强制返回,给PHP增加函数强制类型返回
  20. Nine Knights

热门文章

  1. Java绿盾解密- Ldterm(绿盾加密文件解密)
  2. PDF虚拟打印机怎么保存文件
  3. 大数据时代,我们应该具有怎样的思维方式?
  4. html网页之日历代码,javascript html实现网页版日历代码
  5. 深度装机大师一键重装_就算是电脑小白也能使用自如的重装软件,了解一下?...
  6. 复变函数(第五版)课后答案 余家荣 版 课后习题答案 高等教育出版社 第一章 课后题答案与解析
  7. excel表格如何设置双面打印的方法
  8. Pandas loc/iloc用法详解
  9. php word 简历模板,php程序员简历模板
  10. 中级软件测试笔试题100精讲_软件测试工程师笔试题目(含答案)