structs通过filter来转义html标签

来源:互联网 发布:mac安装win10怎么分区 编辑:程序博客网 时间:2024/05/17 21:15

研究了一天多,终于写出了一个完整版的过滤htmltag的程序

  1. package filter;
  2. import java.io.IOException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.*;
  5. import javax.servlet.Filter;
  6. import javax.servlet.FilterChain;
  7. import javax.servlet.FilterConfig;
  8. import javax.servlet.ServletRequest;
  9. import javax.servlet.ServletResponse;
  10. import filter.MyRequestWrapper;
  11. public class HtmlTagFilter implements Filter{                
  12.       private FilterConfig filterConfig;                
  13.       //private String onErrorUrl;     
  14.    
  15.       public void init(FilterConfig filterConfig) throws ServletException        
  16.       {
  17.               //this.filterConfig = filterConfig;                
  18.               //onErrorUrl=filterConfig.getInitParameter("onError");                
  19.               /*if (onErrorUrl==null || "".equals(onErrorUrl))
  20.               {
  21.                       onErrorUrl="/pages/index.jsp";                
  22.               }*/
  23.        }
  24.       public void doFilter(ServletRequest request, ServletResponse response, FilterChain next)  
  25.       throws IOException,ServletException        
  26.       {                
  27.              HttpServletRequest httpRequest = (HttpServletRequest)request;
  28.              HttpServletResponse httpResponse=(HttpServletResponse)response;
  29.              
  30.              HttpSession httpSession = httpRequest.getSession();
  31.              
  32.              //HashMap m=new HashMap(request.getParameterMap());
  33.              
  34.              //if (hasHtmlTag(m))                
  35.              //{                       
  36.              MyRequestWrapper wrapRequest=new MyRequestWrapper(httpRequest);          
  37.              next.doFilter(wrapRequest, httpResponse);            
  38.              //}
  39.              /*else{
  40.                  next.doFilter(request, response);
  41.              }*/
  42.        }        
  43.         
  44.       /*private boolean hasHtmlTag(HashMap m){
  45.            Iterator iter = m.entrySet().iterator();
  46.            String val = "";
  47.            
  48.            while(iter.hasNext()){
  49.              Map.Entry entry = (Map.Entry)iter.next();
  50.              Object obj = entry.getValue();
  51.              
  52.              if(obj instanceof String[]){
  53.                  String[] strs = (String[])obj;
  54.                  for(int i=0;i<strs.length;i++){
  55.                      val+=strs[i];
  56.                  }
  57.              }else{
  58.                  val = obj.toString();
  59.              }
  60.            }
  61.            //val = html2Text(val);
  62.            return true;
  63.        }*/
  64.       public void destroy()        
  65.       {
  66.           //this.filterConfig = null;
  67.       }
  68. }

 

  1. package filter;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import java.util.regex.Pattern;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletRequestWrapper;
  7. public class MyRequestWrapper extends HttpServletRequestWrapper {
  8.  private Map pattributes = new HashMap();
  9.  public MyRequestWrapper(HttpServletRequest arg0) {
  10.   super(arg0);
  11.   this.pattributes.putAll(getParameterMap());
  12.  }
  13.  public String getParameter(String name) {
  14.      Object v = pattributes.get(name);
  15.      String val = "";
  16.      if (v == null)
  17.          val = null;
  18.      else if(v instanceof String[]){
  19.          String[] strs = (String[])v;
  20.          for(int i=0;i<strs.length;i++){
  21.              val+=strs[i];
  22.          }
  23.      }
  24.      else{
  25.          val = v.toString();
  26.      }
  27.      return htmlFilter(val);
  28.  }
  29.  public void setParameter(String name, String value) {
  30.      this.pattributes.put(name, value);
  31.  }
  32.  private String delHtmlTag(String inputString) { 
  33.      String htmlStr = inputString; 
  34.      String textStr =""
  35.      java.util.regex.Pattern p_script; 
  36.      java.util.regex.Matcher m_script; 
  37.      java.util.regex.Pattern p_style; 
  38.      java.util.regex.Matcher m_style; 
  39.      java.util.regex.Pattern p_html; 
  40.      java.util.regex.Matcher m_html; 
  41.     try { 
  42.        String regEx_script = "<[//s]*?script[^>]*?>[//s//S]*?<[//s]*?///[//s]*?script[//s]*?>"
  43.        String regEx_style = "<[//s]*?style[^>]*?>[//s//S]*?<[//s]*?///[//s]*?style[//s]*?>"
  44.        String regEx_html = "<[^>]+>";
  45.     
  46.        p_script = Pattern.compile(regEx_script,Pattern.CASE_INSENSITIVE); 
  47.        m_script = p_script.matcher(htmlStr); 
  48.        htmlStr = m_script.replaceAll("");
  49.        p_style = Pattern.compile(regEx_style,Pattern.CASE_INSENSITIVE); 
  50.        m_style = p_style.matcher(htmlStr); 
  51.        htmlStr = m_style.replaceAll(""); 
  52.     
  53.        p_html = Pattern.compile(regEx_html,Pattern.CASE_INSENSITIVE); 
  54.        m_html = p_html.matcher(htmlStr); 
  55.        htmlStr = m_html.replaceAll(""); 
  56.     
  57.        textStr = htmlStr; 
  58.         }catch(Exception e) { 
  59.             System.err.println("Html2Text: " + e.getMessage()); 
  60.         } 
  61.         return textStr; 
  62.     }
  63. private String htmlFilter(String value) {
  64.     if ((value == null) || (value.length() == 0)) {
  65.         return value;
  66.     }
  67.     StringBuffer result = null;
  68.     String filtered = null;
  69.     for (int i = 0; i < value.length(); i++) {
  70.         filtered = null;
  71.         switch (value.charAt(i)) {
  72.         case '<':
  73.             filtered = "<";
  74.             break;
  75.         case '>':
  76.             filtered = ">";
  77.             break;
  78.         case '&':
  79.             filtered = "&";
  80.             break;
  81.         case '"':
  82.             filtered = """;
  83.             break;
  84.         case '/'':
  85.             filtered = "'";
  86.             break;
  87.         }
  88.         if (result == null) {
  89.             if (filtered != null) {
  90.                 result = new StringBuffer(value.length() + 50);
  91.                 if (i > 0) {
  92.                     result.append(value.substring(0, i));
  93.                 }
  94.                 result.append(filtered);
  95.             }
  96.         } else {
  97.             if (filtered == null) {
  98.                 result.append(value.charAt(i));
  99.             } else {
  100.                 result.append(filtered);
  101.             }
  102.         }
  103.     }
  104.     return (result == null) ? value : result.toString();
  105. }
  106. }