filter过滤器设置字符格式和过滤不文明用语

1.filter源代码如下

package s050903;
//对post请求方式设置编码:  通过web-xml中设置filter的init-param,再在filter的init中获取参数,实现filter对所有req设置编码格式
import java.io.IOException;
import java.io.UnsupportedEncodingException;

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.HttpServletRequestWrapper;


public class FilterOne implements javax.servlet.Filter{
	  private String encoding;
	public void init(FilterConfig con) throws ServletException {
		encoding=con.getInitParameter("encoding");
	}


	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {
		System.err.println("dofilter service()");
		req.setCharacterEncoding(encoding);
		res.setContentType("text/html;charset=" + encoding);
		
		
		//post方式不需要包装,get才需要包转,提高效率
		HttpServletRequest greq=(HttpServletRequest) req;
		if(greq.getMethod().equals("GET"))
		{
		     req=new MyRequest((HttpServletRequest)req);
		     System.err.println("do Get()");
		}
		chain.doFilter(req, res);   
		
	}
	
	public void destroy() {
		
	}

}

class MyRequest extends HttpServletRequestWrapper{
	  private String[] ss;
	public MyRequest(HttpServletRequest request) {
		super(request);
               //要过滤的不文明用语数组,一般从数据库读取,这里为了方便,自己罗列了3个
		ss=new String[]{"sb","你妈的","白痴"};
	}
	
	public String getParameter(String name)
	{
		String  val=super.getParameter(name);
	
			try {
				val=new String(val.getBytes("ISO-8859-1"),super.getCharacterEncoding());
				
				//过滤脏话,用**替代不文明用语
				for(String s:ss)
				{
					val=val.replace(s, "**");
				}
				
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();                       
			}
		
		return val;
	}
}

 2.代码思想分析:

    用filter对请求进行拦截,然后在filter中设置字符格式,替换掉不文明用语    

 

 

  3.具体步骤:

              3.1 创建一个新的类,extends  HttpServletRequestWrapper

              3.2 创建一个带参数(参数类型为HttpServletRequest )的构造方法,扩展需要修改的方法

              3.3 在filter的doFilter中创建包装类的实例,传入被包装的类

              3.4 根据需要调用被增强的方法

你可能感兴趣的:(filter)