Filter 敏感词汇过滤案例
生活随笔
收集整理的這篇文章主要介紹了
Filter 敏感词汇过滤案例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、需求分析
- 二、案例實現
一、需求分析
(1)對案例錄入的數據進行敏感詞匯過濾 (2)敏感詞匯參考敏感詞匯.txt (3)如果是敏感詞匯,替換為 ***
可以確定 Filter 和 servlet 中的 request 是同一個 request,但是為了實現過濾器的作用,需要對獲得參數進行修改設置,所以需要對 request 對象的 getParameter 方法進行增強。
二、案例實現
這里建立個試驗傳遞非法參數,檢驗過濾效果
@WebServlet("/testServlet") public class TestServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {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);} }敏感詞過濾:SensitiveWordsFilter.java
/*** 敏感詞匯過濾器*/ @WebFilter("/*") public class SensitiveWordsFilter implements Filter {public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("敏感詞過濾。。。");//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方法//判斷是否是getParameter方法if (method.getName().equals("getParameter")) {//增強返回值//獲取返回值String value = (String) method.invoke(req, args);if (value != null) {for (String str : list) {if (value.contains(str)) {value = value.replaceAll(str, "***");}}}return value;}//判斷方法名是否是 getParameterMap//判斷方法名是否是 getParameterValuereturn method.invoke(req, args);}});//2.放行chain.doFilter(proxy_req, resp);}private List<String> list = new ArrayList<String>();//敏感詞匯集合public void init(FilterConfig config) throws ServletException {System.out.println("init....");try {//1.獲取文件真實路徑ServletContext servletContext = config.getServletContext();// 注意這里 a.txt 文檔存儲的是 gbk 格式的中文,否則將亂碼String realPath = servletContext.getRealPath("/WEB-INF/classes/a.txt");//2.讀取文件BufferedReader br = new BufferedReader(new FileReader(realPath));//3.將文件的每一行數據添加到list中String line = null;while ((line = br.readLine()) != null) {list.add(line);}System.out.println(list);br.close();} catch (Exception e) {e.printStackTrace();}}public void destroy() {} }這里注意敏感詞文件中如果有中文需要改成 gbk 編碼,和BufferedReader對應,這樣才不至于亂碼
總結
以上是生活随笔為你收集整理的Filter 敏感词汇过滤案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 汉字分割,php支持中文字符串分
- 下一篇: 软工网络15个人阅读作业2——提问题