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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java Filter——敏感词汇过滤

發(fā)布時(shí)間:2023/12/10 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java Filter——敏感词汇过滤 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Filter的簡(jiǎn)介
Filter也稱之為過(guò)濾器,它是Servlet技術(shù)中最實(shí)用的技術(shù),Web開(kāi)發(fā)人員通過(guò)Filter技術(shù),對(duì)web服務(wù)器管理的所有web資源:例如Jsp, Servlet, 靜態(tài)圖片文件或靜態(tài) html 文件等進(jìn)行攔截,從而實(shí)現(xiàn)一些特殊的功能。例如實(shí)現(xiàn)URL級(jí)別的權(quán)限訪問(wèn)控制、過(guò)濾敏感詞匯、壓縮響應(yīng)信息等一些高級(jí)功能。
它主要用于對(duì)用戶請(qǐng)求進(jìn)行預(yù)處理,也可以對(duì)HttpServletResponse進(jìn)行后處理。使用Filter的完整流程:Filter對(duì)用戶請(qǐng)求進(jìn)行預(yù)處理,接著將請(qǐng)求交給Servlet進(jìn)行處理并生成響應(yīng),最后Filter再對(duì)服務(wù)器響應(yīng)進(jìn)行后處理。

詳解可參考Java中的Filter過(guò)濾器

Filter的配置
Filter的配置有兩種方式
1.注解配置方式:注解配置方式要Servlet3.0才開(kāi)始提供,使用@WebFilter進(jìn)行配置
2.使用web.xml進(jìn)行配置

分享
今天分享是敏感詞匯過(guò)濾的Filter,代碼實(shí)現(xiàn)采用的注解配置方式。為了實(shí)例方便,此次敏感詞匯只用了List數(shù)組存儲(chǔ)兩個(gè),但是在實(shí)際的開(kāi)發(fā)中這種方法是不可取的,其他的方法為:可以在src的目錄下,建立一個(gè)txt文件,文件中存敏感詞匯或者直接用將敏感詞匯存入數(shù)據(jù)庫(kù)(建議使用)

分析
對(duì)請(qǐng)求數(shù)據(jù)進(jìn)行過(guò)濾,需要取出request對(duì)象中的parameter,然后在設(shè)置parameter,但是request對(duì)象的方法中并沒(méi)有setParameter()方法,因此,我們需要對(duì)增強(qiáng)request對(duì)象,通過(guò)動(dòng)態(tài)代理的方法增強(qiáng)request對(duì)象

以下為Filter的代碼:
功能:過(guò)濾“壞蛋”、“笨蛋”。若發(fā)現(xiàn)請(qǐng)求參數(shù)中有列出的詞匯則把相應(yīng)的詞匯用“***”代替

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;//代理類的創(chuàng)建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} }

為了測(cè)試Filter的正確性,可以建一個(gè)TestServlet進(jìn)行測(cè)試

代碼如下

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);}}

啟動(dòng)服務(wù)器之后直接訪問(wèn):http://localhost:8080/testServlet?name="壞蛋"&msg="你的是一個(gè)笨蛋"

可以看到控制臺(tái)打印出了過(guò)濾后的結(jié)果:

總結(jié)

以上是生活随笔為你收集整理的Java Filter——敏感词汇过滤的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。