过滤的是未知参数,代码如下:public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        try {
            byte[] byteContent = new byte[4096];
            int nContentLen = 0;
            while ((nContentLen = request.getInputStream().read(byteContent)) > 0) {
                for (int i = 0; i < nContentLen; i++) {
                    System.out.print(Integer.toHexString(byteContent[i]) + ",");
                }
            }
        } catch (Exception e) {
        }        chain.doFilter(request, response);
    }
request.getParameterNames()也是同样出现过滤后失效。
request.getInputStream().reset() 不起作用有碰到此类问题的么

解决方案 »

  1.   

    nContentLen = request.getInputStream().read(byteContent)
    把这个放在while外边,赋值,然后在放到while里面。
      

  2.   

    InputStream in = request.getInputStream();while ((nContentLen = in.read(byteContent)) > 0) { 
                    for (int i = 0; i < nContentLen; i++) { 
                        System.out.print(Integer.toHexString(byteContent[i]) + ","); 
                    } 
                } 
      

  3.   

    不是楼上两位说的问题。
    我试过其他方法,代码如下:
    方法一:
            try {
                BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(), encode));
                String queryString = "", str = "";
                while ((str = br.readLine()) != null) {
                    queryString += (str);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }方法二:
    for (Enumeration eh = request.getParameterNames(); eh.hasMoreElements();) {
                String parName = (String) eh.nextElement();
                String parValue = request.getParameter(parName);
            }方法一,方法二,和按字节读取效果都是一样,request.getInputStream()过滤后失效
      

  4.   

    你使用什么框架没有,好像使用了struts后,还要加上什么
      

  5.   

    你是不是出异常了????
    你的 catch (Exception e) { 
            } 
    里什么都没做。
      

  6.   

    如果能读到那才是异常。这是最最起码的常识,当一个流数据直接和网络IO挂接,如果你自己读过一次还能再有数据那就奇怪了。getParameter()是因为request自己先getInputStream()然后把内容分析出来放在一个map中让你getParameter来获取。而你自己先getInputStream()了,数据已经被read了怎么可能再getParameter()掉呢?
    在getParameter的实现中想当于这样:if(inputStream还没有处理){
      readInputStream;
      把read到的数据放到map中;
      把标记设为已经处理;
      从map返回你要的那个key的值

    else{
      直接从map取你要的那个值
    }现在你自己先自理InputStream了,
    那行进入if(inputStream还没有处理){
      readInputStream;
      把read到的数据放到map中;
      把标记设为已经处理;
      从map返回你要的那个key的值
    }这段但read不到数据了,所以map中为空,你getParrameter当然为空。
      

  7.   

    不是用getParameter去的参数。在filter过滤后我再用request.getInputStream()已经去不到任何数据了。我想知道怎么过滤request.getInputStream()后还能取到request.getInputStream()的数据。谢谢
      

  8.   

    同样的道理,InputStream已经让你在Filter中处理掉了,再转发给其它的Servlet怎么可能再读到数据?如果需要可以pushBack,将处理过的数据压回到缓冲中再转给Servlet自理,也可以用request包装器重新包装request。
    简单说把数据再塞进去。
      

  9.   

    request包装器不是很好的解决方法。
    有没有类似reset的操作.实现对流透明过滤
      

  10.   

    如何实现request包装器重新包装request呢?期待高手
      

  11.   

    重写struts2 的过滤器,  让当前请求不被过滤 , 就可以取到了