java filter打印请求返回参数
2016-11-08 10:19
1426 查看
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));
}
}
具体代码请下载
https://wenku.baidu.com/view/027d82193868011ca300a6c30c2259010202f329
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));
}
}
具体代码请下载
https://wenku.baidu.com/view/027d82193868011ca300a6c30c2259010202f329
相关文章推荐
- Retrofit打印请求地址和返回内容
- Spring Boot AOP之对请求的参数入参与返回结果进行拦截处理
- android发送http post请求函数带参数带返回数据 静态类 源码
- spring mvc 拦截器打印详细的请求参数信息
- RetroFit请求参数和返回格式说明
- ajax 异步请求后台返回字符串赋值给js参数
- Spring Mvc获取请求参数和 返回参数和注解
- springmvc中 ajax请求错误,返回406,并一直进入error的回调方法,以及返回参数为Object
- Jmeter中通过beanshell脚本解析HTTP请求的返回的json并作为下个请求的输入参数
- 使用SmartUplaod实现图片上传,并给上传图片添加水印后将请求参数以对象的方式返回
- 以post方式携窗体等参数向服务器发送请求 发出去的字节流 返回的内容
- 添加 retrfiot 拦截器Interceptor ,打印服务器返回的json并添加网络请求公共的header
- Ajaxa请求:参数、传递的数据、返回的数据
- SpringMVC Controller接收前台ajax的GET或POST请求返回各种参数
- tomcat的acess_log打印post请求参数,分析日志
- 向指定 URL 发送GET,POST方法的请求(传入指定url和参数,服务器返回字符串数据)
- getParameterMap()的返回值为Map<String, String[]>,从其中取得请求参数转为Map<String, String>的方法如下:
- IOS博客项目搭建-20-项目重构-封装请求参数和返回的结果
- 关于传入不同参数请求同一Ajax后返回数据显示错乱的问题
- Springmvc中 同步/异步请求参数的传递以及数据的返回