温州知名网站推广/站长工具网站
一、需求:敏感词汇 过滤
二、技术点:过滤器(Filter),代理增强(Proxy)
三、代码:
1、测试工程目录
2、src下创建敏感词文件 敏感词.txt
3、新建敏感词过滤器 SensitiveWordsFilter.java
package com.mollen.filter;
package com.mollen.filter.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
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;/*** @ClassName: SensitiveWordsFilter* @Auther: Mollen* @CreateTime: 2018-10-09 21:04:35* @Description:* 敏感词过滤*/
@WebFilter("/testServlet")
public class SensitiveWordsFilter implements Filter {// 1.创建敏感词汇集合private List<String> list = new ArrayList<>();// 2.加载敏感词汇文件@Overridepublic void init(FilterConfig filterConfig) throws ServletException {try {//ServletContext是servlet全局对象ServletContext servletContext = filterConfig.getServletContext();String path = servletContext.getRealPath("/WEB-INF/classes/敏感词.txt");BufferedReader br = new BufferedReader(new FileReader(path));String line = null;while ((line = br.readLine()) != null) {list.add(line);}br.close();System.out.println(list);} catch (Exception e) {e.printStackTrace();}}//3.创建代理对象,增强getParameter方法@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {ServletRequest proxy_request = (ServletRequest) Proxy.newProxyInstance(servletRequest.getClass().getClassLoader(), servletRequest.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(servletRequest, args);if (value != null) {for (String str : list) {if (value.contains(str)) {value = value.replaceAll(str, "***");}}}return value;}return method.invoke(servletRequest, args);}});//过滤器放行filterChain.doFilter(proxy_request, servletResponse);}@Overridepublic void destroy() {}
}
4、新建测试 TestServlet.java
package com.mollen.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/testServlet")
public class TestServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.乱码处理request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");//2.获取前台数据String id = request.getParameter("id");//3.控制台打印一下System.out.println(id);//4.页面再打印一下response.getWriter().write("提交的数据是:"+id);}
}
实现效果如下:
原文:https://blog.csdn.net/mollen/article/details/82989303