Java过滤器实现简单的敏感词屏蔽

以jsp作为显示,过程很简单就是拦截jsp的页面提交过来的一串内容,对其中的敏感词进行屏蔽替换,最后在转发到jsp页面显示。

这里采用一种简单易理解的方法,新建一个servlet类继承HttpServletRequestWrapper,然后重写getParameter方法。

package zdc.servletTest;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class MyServlet extends HttpServletRequestWrapper {
   
    public MyServlet(HttpServletRequest request) {
        super(request);      
    }

    @Override
    public String getParameter(String name) {
        List<String> dirty = new ArrayList<String>();
        dirty.add("cnm");
        String content = super.getParameter(name);
        for(String s:dirty) {
            if(content.contains("cnm")) {
                content = content.replaceAll(s, "***");
            }
        }
        return content;
    }   
    
}
MyServlet

然后在DataFilter类中实现过滤功能

package zdc.filter;

import java.io.IOException;
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.http.HttpServletRequest;

import zdc.servletTest.MyServlet;

public class DataFilter implements Filter {    

    public DataFilter() {

    }

    public void destroy() {

    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        
        
        MyServlet req = new MyServlet((HttpServletRequest)request);//在过滤器中用装饰模式把 原装request的功能增强了
        
        chain.doFilter(req, response);//前往不要忘记放行
    }

    public void init(FilterConfig fConfig) throws ServletException {
        
    }

}
DataFilter

在DataServlet中做转发处理

package zdc.servletTest;

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;


public class DataServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
           
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String content = request.getParameter("content");
        request.setAttribute("content", content);
        request.getRequestDispatcher("/test.jsp").forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
DataServlet

至于显示页面test.jsp及其简陋,自行想象。最后功能就是如果输入你好,cnm。会屏蔽为你好,***。

posted @ 2017-10-24 16:11  zdc_1996  阅读(2235)  评论(0编辑  收藏  举报