编写了两个filter分别对post请求做处理,获取post请求的数据的代码如下
BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream)request.getInputStream()));   
               String line = null;   
               StringBuilder sb = new StringBuilder();   
               while((line = br.readLine())!=null){   
                   sb.append(line);   
               }  
               if(sb.toString()==null)
            {
            NeedSqldetect=false;
            System.out.println("request is null");
            }
            else
            {
                   requeststr=URLDecoder.decode(sb.toString(),"UTF-8");
                System.out.println("request="+requeststr);
            }
然后在第一个filter中使用
chain.doFilter(request, response);
将请求再传递给第二个filter
但是为什么只有第一个filter能获得到post数据,第二个获取的post数据是空的?请大侠们帮帮忙

解决方案 »

  1.   

    debug看一下是否进入了第二个filter
      

  2.   

    两个filter连接好了,能进入第二个filter,而且在第二个filter里获取post请求的IP地址什么的都是可以成功的,但是无法再次获得post请求的数据,还会是什么地方的问题呢?
      

  3.   

    不知道我理解的对不对,有望大家指教。首先说下stream的含义。
    stream我记得是翻译成流吧,流的意思就是说当你读取之后就无法回到上一次读取的数据。所以说流是单向的。当第一个filter中读取流之后流已经被读完。所以无法继续读取。所以第二个filter中读不到数据。
      

  4.   

    对的。
    第一个filter读完后将数据存到某域变量,供第二个Filter用就行了。
      

  5.   


        我只开发filter,对后方的servlet未知的情况下,还需要在处理后将post请求再发送给servlet,所以不能对post请求做修改,也不能出现post请求数据丢失的情况,有没有好的建议解决这个问题?难道要在最后重构一次post请求?    谢谢
      

  6.   

    这个比较头疼。
    只要不getInputStream/getReader,用其他的方法如getParameter是没有影响的,一定要getInputStream么?