日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Filter的敏感词汇过滤案例

發布時間:2023/12/10 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Filter的敏感词汇过滤案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求:
1. 對day17_case案例錄入的數據進行敏感詞匯過濾
2. 敏感詞匯參考《敏感詞匯.txt》
3. 如果是敏感詞匯,替換為 ***

分析:1.對request對象進行增強(動態代理),增強獲取參數相關方法2.放行,傳遞代理對象

SensitiveWordsFilter:

package cn.itcast.web.filter;import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.BufferedReader; import java.io.FileNotFoundException; 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;/*** 敏感詞匯過濾器*/ @WebFilter("/*") public class SensitiveWordsFilter implements Filter {// 敏感詞匯集合private List<String> list = new ArrayList<String>();@Overridepublic void init(FilterConfig filterConfig) throws ServletException {BufferedReader br = null;try {// 1.加載文件真實路徑ServletContext servletContext = filterConfig.getServletContext();// 獲取src下的敏感詞匯// 該處realPath可以使用getResourcesAsStream獲取String realPath = servletContext.getRealPath("/WEB-INF/classes/敏感詞匯.txt");// 2.讀取文件br = new BufferedReader(new FileReader(realPath));// 3.將文件的每一行數據添加到list中String line = null;while ((line = br.readLine()) != null) {list.add(line);}} catch (Exception e) {e.printStackTrace();} finally {if (br != null) {try {br.close();} catch (IOException e) {e.printStackTrace();}}}System.out.println(list);}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {// 1.創建代理對象,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方法// 判斷是否是getParameter方法if ("getParameter".equals(method.getName())) {// 使用真實對象request,獲取前端請求中返回的參數并增強該參數String value = (String) method.invoke(servletRequest, args);if (value != null) {// 遍歷文件配置文件中獲取的敏感詞匯for (String str : list) {if (value.contains(str)) {value = value.replaceAll(str, "***");}}}// 返回增強后的返回值為替換了敏感詞匯的返回值return value;}// 判斷方法是否是getParameterMap// 需要實現// 判斷方法是否是getParameterValue// 需要實現// getParameter方法以外的方法正常執行return method.invoke(servletRequest, args);}});// 2.放行filterChain.doFilter(proxy_request, servletResponse);}@Overridepublic void destroy() {} }

TestServlet:

package cn.itcast.web.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 {// 從前臺輸入tomcat中設定好的url以及name參數和msg參數// msg的值或name的值可以使用配置文件中的敏感詞匯String name = request.getParameter("name");String msg = request.getParameter("msg");// 敏感詞匯將替換成 張三:你個***你個大***System.out.println(name+":"+msg);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);} }

敏感詞匯.txt 該文件在src下

笨蛋 壞蛋 其他敏感詞匯可以自行添加

總結

以上是生活随笔為你收集整理的Filter的敏感词汇过滤案例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。