java filter打印请求返回参数

来源:互联网 发布:crm系统导出数据 编辑:程序博客网 时间:2024/04/29 10:48

1、对HttpServletRequestWrapper进行封装,先把数据保存到临时byte[],然后得到数据后,再把数据复制到request中

2、对HttpServletResponseWrapper进行封装,同样道理 把数据输出到ByteArrayOutputStream,得到数据后,再response.getWriter().write(result);

3、filter中对request\response封装,filter.doFilter(requestWrapper, responseWrapper);

4、乱码解决:responseWrapper中输出流设置编码,response中也设置编码即可解决乱码问题

2017-04-20更新:

5、对经过filter后Enumeration<String> ks=request.getParameterNames();无法获取正确参数的问题,查看tomcat对request参数的处理,解决方式为覆盖HttpServletRequestWrapper中的getParameterNames()和getParameter()函数,因为tomcat读取一次请求参数request.getParameterNames()后就将原参数清空,所以需要

覆盖原HttpServletRequestWrapper中的部分函数。


  @Override
    public Enumeration getParameterNames() {
        initParamHashValues();  
        return Collections.enumeration(paramHashValues.keySet());
    }
    
    @Override
    public String getParameter(String name) {
        initParamHashValues();  
        return (String) paramHashValues.get(name);
    }
    
    public void initParamHashValues(){
        if (!didQueryParameters) {
            didQueryParameters=true;
            Enumeration<String> ks=super.getParameterNames();  
            while(ks.hasMoreElements()){
                String key=ks.nextElement();
                String value=super.getParameter(key);
                paramHashValues.put(key, value);
            }
            System.out.println("initParamHashValues:"+JSON.toJSON(paramHashValues));
          }
    }

 

具体代码请下载

http://wenku.baidu.com/view/5282a9d7c0c708a1284ac850ad02de80d4d806b4

2 0