struts1中,填充的ActionForm怎么可以过滤安全字符?
比如',""<> 等特殊字符!
自己写了拦截器,过滤器,重写了request 都不行哦!

解决方案 »

  1.   


    chain.doFilter(new HttpServletRequestWrapper((HttpServletRequest) req){

    @Override
    public String[] getParameterValues(String name) {
    String resultString = getRequest().getParameter(name);
    if(resultString == null)return null;
    for(String p : patternMap.keySet()){
    resultString = resultString.replaceAll(p, patternMap.get(p));
    }
    return new String[]{resultString};
    }



    @Override
    public String getParameter(String name) {
    String resultString = getRequest().getParameter(name);
    if(resultString == null)return null;
    for(String p : patternMap.keySet()){
    resultString = resultString.replaceAll(p, patternMap.get(p));
    }
    return resultString;
    }
    }, rep);
    上面是重写request ,struts1 就是不调用啊!
      

  2.   

    你为啥要将他们转义呢?就算是含有转义字符的参数,在后台用JDBC操作的的时候用PreparedStatement对象动态设置参数,就可以避免转义字符导致的错误
      

  3.   

    提交的时候,用js过滤啊,给你个参考:
    function CommonCheck()
      {
        //禁止使用半角单引号和双引号 
    for(i=0;i<document.forms.length;i++)
    for (j=0; j<document.forms(i).length; j++)
    {
    if(document.forms(i).item(j)!=null&&document.forms(i).item(j).value.indexOf("'")>=0)
    {
     alert("请使用全角单引号!");
     document.forms(i).item(j).focus();
     return false;
    }
    if(document.forms(i).item(j)!=null&&                  document.forms(i).item(j).value.indexOf('"')>=0)
    {
     alert("请使用全角双引号!");
     document.forms(i).item(j).focus();
     return false;
    }
      }
      return true;
      }
      

  4.   

    项目是很久以前的项目,是用的Statement,我也没有办法啊!
      

  5.   


    如果项目比较小的话,那你就改成PreparedStatement呗;
    转义的话可以用commons-lang.xxx.jar包中 StringEscapeUtils类来实现public static void main(String[] args) {
                    //转义
    String s=StringEscapeUtils.escapeHtml("<&&&&&>'");
    System.out.println(s);//输出&lt;&amp;&amp;&amp;&amp;&amp;&gt;'
                    //反转义
    String s1=StringEscapeUtils.unescapeHtml("&lt;&amp;&amp;&amp;&amp;&amp;&gt;'");
    System.out.println(s1);//输出<&&&&&>'
    }
      

  6.   

    你在过滤器中重写request对象的那些方法根本不起作用,只有改写javax.servlet.http.HttpServletRequest对象中的方法才有效。你只需要在你的过滤器中写个方法对request对象中的参数用上述方法做一下转义处理即可
      

  7.   

    在过滤器中处理估计不行,得去每个ActionForm中对set和get方法中的参数转义或者去后台在拼写sql语句之前将参数转义之后再拼
      

  8.   

    覆写actionform 的validate方法应该可以达到你的要求
      

  9.   

    大哥,都什么年代了,人们都不提struts1了