用户上传的内容会首先经过过滤器。我想在filter里对所有request.getParameter()获得的值处理一下,过滤掉敏感的字符。这能实现吗?请高手指教。

解决方案 »

  1.   

    就事论事java.util.Enumeration  getParameterNames() 返回所有parameter的name遍历该Enumeration,通过getParameter()取出所有parameter的vlaue,然后做你的判断或过滤
    至于能否实现,或者说对性能的影响问题,没有做过,无从而知
      

  2.   

    好像做不到,在执行filter的时候,参数还没有解析呢
      

  3.   

    我试过,所有参数都可以取出来。现在问题是怎样修改这个参数。
    用request.setAttribute好像不行。
      

  4.   

    你可以在filter中使用一个httpservletrequrestwrapper来包装httpservletrequest,重写getParameter函数,在doFilter((servletrequest)httpservletrequrestwrapper,response);我刚学java,不过我可以告诉你,使用filter来修改request的特别字符是绝对可行的。你继承httpservletrequrestwrapper就可以了。
      

  5.   

    lazyfish(呆呆虫)的方法应该可行,不过能说得具体一点吗,这块没弄过。
      

  6.   

    就是你自己建个class,继承httpservletrequrestwrapper,然后重写httpservletrequrestwrapper中的方法,比方说getParameter方法。不好意思,我只能告诉你这个思路,具体的你可以去google.下面我搜索的我你可以参考一下。package trimmer.filter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;public final class MyRequestWrapper extends  HttpServletRequestWrapper {  public MyRequestWrapper(HttpServletRequest servletRequest) {    super(servletRequest);  }  public String[] getParameterValues(String parameter) {    String[] results = super.getParameterValues(parameter);    if (results==null)      return null;    int count = results.length;    String[] trimResults = new String[count];    for (int i=0; i<count; i++) {      trimResults = results[i].trim();    }    return trimResults;  }}
      

  7.   

    正好需要同样功能,搜到文章
    http://servlets.com/soapbox/filters.html
      

  8.   

    你可以这样啊,在action里不要读参数,而读属性.
    那么在这个filter就可以把参数的值取出来,然后把它们过滤,再放到request里,进入到action里就不要读参数了,而是读属性