首页 > 编程知识 正文

filter过滤器,编写敏感词过滤程序

时间:2023-05-03 23:14:36 阅读:215449 作者:1874

文章目录 一、需求及分析二、过滤器三、xml配置四、测试sevlet

一、需求及分析

(1)对录入的数据进行敏感词汇过滤。
(2)敏感词汇参考 敏感词汇.txt文档
(3)如果是敏感词汇,替换为"***"。

分析:使用代理模式对request对象进行增强,增强获取参数相关方法(getParameter等)。然后放行,传递代理对象。以getParameter为例,getParameterMap,getParameterValue与getParameter的逻辑一样。

二、过滤器 @WebFilter(value="/*"):使用注解配置,对所有的servlet都进行过滤。注意在init()方法中将敏感词汇.txt文件中的每一条敏感语句都放进了list集合中,这个使用流操作的方式要熟练。使用流操作默认使用gbk编码,所以注意要将敏感词汇.txt中的编码也该改为gbk。在src下创建了一个名为"敏感词汇.txt"的文件,其中的敏感词汇如下:

package com.gql.filter;import java.io.BufferedReader;import java.io.FileReader;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.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import sun.text.normalizer.Replaceable;/** * 类说明: * 敏感词汇过滤器 * * @author qianliangguo */@WebFilter(value="/*")public class SensitiveFilter implements Filter {@Overridepublic void doFilter(final ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {// 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("getParameter".equals(method.getName())){String value = (String) method.invoke(req, args);if(value != null){for (String str : list) {if(value.contains(str)){value = value.replace(str, "***");}}}return value;}return method.invoke(req, args);}});// 2.放行chain.doFilter(Proxy_req, resp);}private List<String> list = new ArrayList<String>();//敏感词汇集合@Overridepublic void init(FilterConfig config) throws ServletException {try {//1.加载文件ServletContext servletContext = config.getServletContext();String realPath = servletContext.getRealPath("/WEB-INF/classes/敏感词汇.txt");//2.读取文件BufferedReader br= new BufferedReader(new FileReader(realPath));//3.将文件的每一行添加到list集合中String line = null;while((line = br.readLine())!=null){list.add(line);}br.close();System.out.println(list);} catch (Exception e) {e.printStackTrace();}}@Overridepublic void destroy() {// TODO Auto-generated method stub}} 三、xml配置 <?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" ><display-name></display-name><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>testServlet</servlet-name> <servlet-class>com.gql.filter.testServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>testServlet</servlet-name> <url-pattern>/testServlet</url-pattern> </servlet-mapping></web-app> 四、测试sevlet package com.gql.filter;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 类说明: * 测试敏感词汇 * @author qianliangguo */public class testServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {String name = req.getParameter("name");String msg = req.getParameter("msg");System.out.println(name+":"+msg);}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {this.doPost(req, resp);}}

在浏览器地址栏输入:http://localhost:8080/Filter/testServlet?name=用户&msg=嘤嘤嘤,周冬雨你是大坏蛋。返回出的结果如下:

测试成功。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。