国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

敏感內(nèi)容替換(字符替換過濾器)

2019-11-08 02:30:20
字體:
供稿:網(wǎng)友

有時(shí)需要對網(wǎng)站內(nèi)容顯示進(jìn)行控制,防止用戶輸入非法或敏感內(nèi)容,常規(guī)的辦法是保存數(shù)據(jù)庫之前對非法內(nèi)容進(jìn)行替換,但這種方法具有局限性。

現(xiàn)在給出一種新的方法,使用過濾器。在Web服務(wù)器獲得用戶請求之前,過濾器可以訪問該請求,在Web服務(wù)器將輸出響應(yīng)給用戶之前,過濾器還可以訪問該響應(yīng),可以在過濾器中將該響應(yīng)轉(zhuǎn)換為自定義響應(yīng),最后將過濾后的自定義響應(yīng)返回給客戶端。

關(guān)于FilterChain對象的doFilter方法,通俗的講doFilter就像一扇門,用戶請求(request)在過濾器執(zhí)行一些操作后,通過doFilter方法,到達(dá)下一個(gè)過濾器或者直接是資源文件,Web服務(wù)器收到請求后響應(yīng)(response)用戶,response又會(huì)通過doFilter這扇門回到之前過濾器doFilter方法中,執(zhí)行chain.doFilter()方法后面的語句,在這時(shí),可以對response進(jìn)行修改,比如將敏感字符替換。

過濾器圖解:

下面是一個(gè)自定義響應(yīng)對象的類,繼承了HttpServletResponseWrapper類,里面重寫了toString方法,getWriter方法。

package com.yykj.servlet;import javax.servlet.http.*;import java.io.CharArrayWriter;import java.io.PRintWriter;public class Wrapper extends HttpServletResponseWrapper {    private CharArrayWriter charArrayWriter;//字符數(shù)組輸出流    public Wrapper(HttpServletResponse response){        super(response);//父類構(gòu)造方法        this.charArrayWriter = new CharArrayWriter();    }    @Override    public String toString(){        return charArrayWriter.toString();    }    @Override    public PrintWriter getWriter(){//從服務(wù)器傳出過程中會(huì)調(diào)用        return new PrintWriter(charArrayWriter);//使得輸出流為charArrayWriter類型    }}過濾器代碼:

package com.yykj.servlet;import javax.servlet.*;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;public class CTFilter implements Filter {    private FilterConfig filterConfig  = null;    public void init(FilterConfig filterConfig){        System.out.println("init");        this.filterConfig = filterConfig;    }    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)            throws ServletException, IOException{        response.setCharacterEncoding("UTF-8");        PrintWriter out = response.getWriter();        Wrapper wrapper = new Wrapper((HttpServletResponse) response);//自定義響應(yīng)        filterChain.doFilter(request, wrapper);//如果wrapper不傳進(jìn)去,他的字符串就為空,getWriter在這傳遞過程中調(diào)用        String resStr = wrapper.toString().trim();        String newStr = "";        if (resStr.indexOf("法輪功") > 0) {//簡單的非法字符替換            newStr = resStr.replace("法輪功", "***");        }        out.println(newStr);    }    public void destroy(){        this.filterConfig = null;    }}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 钟山县| 花莲县| 滦南县| 威信县| 竹山县| 阿克陶县| 南郑县| 内丘县| 同江市| 湖南省| 淳化县| 汉源县| 汝南县| 临澧县| 龙岩市| 珲春市| 伊川县| 梅河口市| 玉屏| 上高县| 白水县| 临潭县| 淮安市| 苍溪县| 金乡县| 灵台县| 柯坪县| 华亭县| 喀什市| 琼结县| 龙里县| 梧州市| 鄄城县| 府谷县| 左云县| 滕州市| 清水河县| 云南省| 万宁市| 剑河县| 石城县|