HTML特殊字符过滤器

来源:互联网 发布:淘宝摄影需要什么器材 编辑:程序博客网 时间:2024/06/05 02:11
  1. package com.pdsu.filter;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.servlet.Filter;  
  6. import javax.servlet.FilterChain;  
  7. import javax.servlet.FilterConfig;  
  8. import javax.servlet.ServletException;  
  9. import javax.servlet.ServletRequest;  
  10. import javax.servlet.ServletResponse;  
  11. import javax.servlet.http.HttpServletRequest;  
  12. import javax.servlet.http.HttpServletRequestWrapper;  
  13. import javax.servlet.http.HttpServletResponse;  
  14.   
  15. /** 
  16.  * 类说明:HTML特殊字符过滤器 
  17.  *  
  18.  * @author 作者: LiuJunGuang 
  19.  * @version 创建时间:2011-11-18 下午07:36:44 
  20.  */  
  21. public class HTMLCharacterFilter implements Filter {  
  22.   
  23.     public void init(FilterConfig filterConfig) throws ServletException {  
  24.   
  25.     }  
  26.   
  27.     public void doFilter(ServletRequest req, ServletResponse resp,  
  28.             FilterChain chain) throws IOException, ServletException {  
  29.         HttpServletRequest request = (HttpServletRequest) req;  
  30.         HttpServletResponse response = (HttpServletResponse) resp;  
  31.         chain.doFilter(new HTMLCharacterRequest(request), response);  
  32.     }  
  33.   
  34.     public void destroy() {  
  35.   
  36.     }  
  37. }  
  38.   
  39. // html特殊字符处理类  
  40. class HTMLCharacterRequest extends HttpServletRequestWrapper {  
  41.   
  42.     public HTMLCharacterRequest(HttpServletRequest request) {  
  43.         super(request);  
  44.     }  
  45.   
  46.     @Override  
  47.     public String getParameter(String name) {  
  48.         return filter(super.getParameter(name));  
  49.     }  
  50.     @Override  
  51.     public String[] getParameterValues(String name) {  
  52.         String[] values = super.getParameterValues(name);  
  53.         if (values == null || values.length == 0)  
  54.             return values;  
  55.         for (int i = 0; i < values.length; i++) {  
  56.             String str = values[i];  
  57.             values[i] = filter(str);  
  58.         }  
  59.         return values;  
  60.     }  
  61.     /** 
  62.      * 对特殊的html字符进行编码 
  63.      *  
  64.      * @param message 
  65.      * @return 
  66.      */  
  67.     private String filter(String message) {  
  68.   
  69.         if (message == null)  
  70.             return (null);  
  71.   
  72.         char content[] = new char[message.length()];  
  73.         message.getChars(0, message.length(), content, 0);  
  74.         StringBuilder result = new StringBuilder(content.length + 50);  
  75.         for (int i = 0; i < content.length; i++) {  
  76.             switch (content[i]) {  
  77.             case '<':  
  78.                 result.append("&lt;");  
  79.                 break;  
  80.             case '>':  
  81.                 result.append("&gt;");  
  82.                 break;  
  83.             case '&':  
  84.                 result.append("&amp;");  
  85.                 break;  
  86.             case '"':  
  87.                 result.append("&quot;");  
  88.                 break;  
  89.             default:  
  90.                 result.append(content[i]);  
  91.             }  
  92.         }  
  93.         return (result.toString());  
  94.   
  95.     }  
  96. }  


在web.xml中添加如下内容:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <!-- HTML特殊字符过滤器 -->  
  2. <filter>  
  3.     <filter-name>HTMLFiter</filter-name>  
  4.     <filter-class>com.pdsu.filter.HTMLCharacterFilter</filter-class>  
  5. </filter>  
  6. <filter-mapping>  
  7.     <filter-name>HTMLFiter</filter-name>  
  8.     <url-pattern>/*</url-pattern>  
  9. </filter-mapping>  
0 0
原创粉丝点击