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; } }
然后在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 { } }
在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); } }
至于显示页面test.jsp及其简陋,自行想象。最后功能就是如果输入你好,cnm。会屏蔽为你好,***。