JavaEE Filter敏感詞過濾的方法實(shí)例詳解
我們在聊天的時(shí)候的或者留言的時(shí)候,有部分詞是不允許發(fā)表出來。我們可以采用過濾器實(shí)現(xiàn)這個(gè)功能。
我們只是簡單利用過濾器實(shí)現(xiàn)這個(gè)過濾的功能,有些地方?jīng)]寫的很全
前臺代碼:
<body> <form action="<c:url value='/WordServlet'/>" method="post"> 姓名:<input type="text" name="name"/><br/> 留言內(nèi)容:<textarea rows="10" cols="10" name="textarea"></textarea><br/> <input type="submit" value="提交"/> </form> </body>
Servlet里面的代碼:

僅僅只是把從前臺收的數(shù)據(jù)讀取出來。看里面的敏感詞是都過濾。
代碼:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name =request.getParameter("name");//名字
String text=request.getParameter("textarea");//瀏覽內(nèi)容
PrintWriter pw =response.getWriter();
pw.println("name="+name);//這里直接輸出,僅僅只是為了查看能否過濾那些關(guān)鍵字。。
pw.print("內(nèi)容"+text);
}過濾器:
過濾的作用就可以體現(xiàn)了,過濾器的是在客戶端訪問服務(wù)器的之間進(jìn)行攔截的。
我們知道過濾器能夠控制request和response,所以我們能夠?qū)@個(gè)進(jìn)行下手。
從客戶端請求是request,所以我們只需要在半路將其攔截,修改里面的值就可以實(shí)現(xiàn)過濾了。采用了包裝的設(shè)計(jì)模式;
過濾器代碼:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest) request;
MyFilter myf =new MyFilter(req);
chain.doFilter(myf, response);//采勇我們加強(qiáng)的類的request,傳給后面的servlet使用
} 自己手動寫一個(gè)myFilter類來修改里面我們需要用到的函數(shù)。
class MyFilter extends HttpServletRequestWrapper{
//這是采用包裝模式
public MyFilter(HttpServletRequest request) {
super(request);
}
@Override //從寫這個(gè)方法
public String getParameter(String name) {
String words =super.getParameter(name);
System.out.println(words);//過濾前的文字
List<String> list=WordUtils.getword();
for(String ll:list){
words=words.replace(ll, "*");//敏感詞匯采用**代替
}
return words;
} 為了方便維護(hù),我們的敏感詞匯的獲取專門寫了一個(gè)工具,方便取,當(dāng)然也方便管理員添加進(jìn)去。
public class WordUtils {
//采用單例模式
private static List<String> list =new ArrayList<String>();//我們可以從這訪問數(shù)據(jù)庫中存的敏感詞匯,封裝成list返回
static {//手動添加幾個(gè)
list.add("坑貨");
list.add("罵人");
list.add("傻");
}
public static List<String> getword(){
return list;
}
public static void addWord(String name){
list.add(name);
}
public static void sava(){
//這里可以list里面的數(shù)據(jù)存到數(shù)據(jù)庫中,方便維護(hù),當(dāng)然也可以寫增刪改查等
} 在這里,只要含有這個(gè)詞的,全部會變成*
效果圖;

總結(jié):過濾器的強(qiáng)大,可以修改request和response對象一起,你需要調(diào)什么函數(shù),我們就可以采用包裝設(shè)計(jì)模式的方式修改這個(gè)函數(shù),變成我們想要的效果,這個(gè)和代理設(shè)計(jì)模式有點(diǎn)類似。
以上所述是小編給大家介紹的使用JavaEE filter 過濾敏感詞的方法的相關(guān)知識,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
springboot整合 xxl-job的項(xiàng)目實(shí)踐
XL-JOB是一個(gè)分布式任務(wù)調(diào)度平臺,用于解決分布式系統(tǒng)中的任務(wù)調(diào)度和管理問題,它包括調(diào)度中心、執(zhí)行器和Web管理控制臺,本文就來介紹一下springboot整合 xxl-job的項(xiàng)目實(shí)踐,感興趣的可以了解一下2024-09-09
SpringCloud3.x集成BigQuery的代碼實(shí)現(xiàn)
Google BigQuery 是一種高性能、可應(yīng)用于大數(shù)據(jù)分析的公主云數(shù)據(jù)庫服務(wù),Spring Cloud 提供了完善的工具和核心功能,可以進(jìn)行泛動分布應(yīng)用構(gòu)建,本文給大家介紹了SpringCloud3.x集成BigQuery的代碼實(shí)現(xiàn),需要的朋友可以參考下2025-01-01
ThreadPoolExecutor中的submit()方法詳細(xì)講解
在使用線程池的時(shí)候,發(fā)現(xiàn)除了execute()方法可以執(zhí)行任務(wù)外,還發(fā)現(xiàn)有一個(gè)方法submit()可以執(zhí)行任務(wù),本文就詳細(xì)的介紹一下ThreadPoolExecutor中的submit()方法,具有一定的參考價(jià)值,感興趣的可以了解一下2022-04-04
Java8新特性之重復(fù)注解(repeating annotations)淺析
這篇文章主要介紹了Java8新特性之重復(fù)注解(repeating annotations)淺析,這個(gè)新特性只是修改了程序的可讀性,是比較小的一個(gè)改動,需要的朋友可以參考下2014-06-06
Spring?Cloud?Gateway集成Sentinel流控詳情
這篇文章主要介紹了Spring?Cloud?Gateway集成Sentinel流控詳情,Sentinel支持對Spring?Cloud?Gateway、Zuul等主流的API?Gateway進(jìn)行限流,需要的朋友可以參考一下2022-09-09

