本文共 2434 字,大约阅读时间需要 8 分钟。
监听器小demo之检查敏感字
写一个过滤器,检查评论是否有敏感字,敏感字通过配置文件设置,如果有,则提示用户有敏感字。
步骤如下:
step1,写一个java类,实现Filter接口。
step2,在doFilter方法里面,编写拦截处理逻辑。
package web;import java.io.IOException;import java.io.PrintWriter;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 javax.servlet.http.HttpServletResponse;public class CommentFilter1 implements Filter{ private FilterConfig config; public CommentFilter1(){ System.out.println("Filter1's constructor ..."); } /** * 容器在销毁过滤器之前,会调用destroy方法。 * 该方法只会执行一次。 */ public void destroy() { System.out.println("Filter1's destroy ..."); } /** * 容器会调用doFilter方法来处理请求,类似于容器调用servlet的 * service方法一样。 * 如果调用了FilterChain(过滤器链)的doFilter方法,容器会继续 * 调用后续的过滤器或者servlet,如果没有调用FilterChain的 * doFilter方法,则容器不再向后调用。 */ public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain) throws IOException, ServletException { System.out.println("Filter1's doFilter method start..."); //强制转换成子接口 HttpServletRequest request = (HttpServletRequest)arg0; HttpServletResponse response = (HttpServletResponse) arg1; //读取请求参数 request.setCharacterEncoding("utf-8"); String content = request.getParameter("comment"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); //通过FilterConfig对象读取初始化参数 String illegalStr = config.getInitParameter("illegalStr"); if(content.indexOf(illegalStr)!=-1){ //有敏感字,提示用户 out.println("有敏感字
"); }else{ //无敏感字,继续向后调用 chain.doFilter(arg0, arg1); } System.out.println("Filter1's doFilter end ..."); } /** * 容器在启动时,会创建过滤器实例,接下来,会立即调用init方法完成 * 初始化操作。该方法只会执行一次。 * 容器会事先创建好一个符合FilterConfig接口要求的对象。可以通过 * FilterConfig.getInitPrameter方法来访问过滤器的初始化参数。 */ public void init(FilterConfig filterConfig) throws ServletException { System.out.println("Filter1's init..."); //因为init方法只会执行一次,方法执行完之后,filterConfig变量就 //会被销毁,所以,需要将filterConfig的值赋给config属性,这样, //就可以在doFilter方法里访问到FilterConfig对象了。 //FilterConfig对象可以读取Filter的初始化参数。 //初始化参数配置在web.xml文件中。 config = filterConfig; }}
step3,配置(web.xml)过滤器。
filter1 web.CommentFilter1 illegalStr cat filter1 /comment
附过滤器执行过程: