国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 建平县| 崇礼县| 台江县| 堆龙德庆县| 类乌齐县| 灯塔市| 武汉市| 绿春县| 中江县| 宁城县| 永昌县| 城步| 澄迈县| 鹰潭市| 都安| 紫金县| 南涧| 建宁县| 华宁县| 卢龙县| 资源县| 无极县| 德清县| 民县| 沅陵县| 新兴县| 云浮市| 榆社县| 神池县| 桓仁| 罗江县| 南岸区| 彭水| 洱源县| 东乡县| 天津市| 武平县| 光山县| 中牟县| 佳木斯市| 阳江市|