最近做项目,发现要修改request的参数内容。因为想要在request的paramMap里面默认注入,modifier和modifierName,这些内容。但是这个Map是不能修改的。所以采用了如下办法:下面的办法网上也有的这里只做备份。

1. 创建request转换器

  1. package com.tmall.lafite.web.base;
  2.  
  3. import java.util.Enumeration;
  4. import java.util.Map;
  5. import java.util.Vector;
  6.  
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletRequestWrapper;
  9.  
  10. class ParameterRequestWrapper extends HttpServletRequestWrapper {
  11.  
  12. private Map<String, String[]> params;
  13.  
  14. public ParameterRequestWrapper(HttpServletRequest request,
  15. Map<String, String[]> newParams) {
  16. super(request);
  17.  
  18. this.params = newParams;
  19.  
  20. // RequestDispatcher.forward parameter
  21. renewParameterMap(request);
  22. }
  23.  
  24. @Override
  25. public String getParameter(String name) {
  26. String result = "";
  27.  
  28. Object v = params.get(name);
  29. if (v == null) {
  30. result = null;
  31. } else if (v instanceof String[]) {
  32. String[] strArr = (String[]) v;
  33. if (strArr.length > 0) {
  34. result = strArr[0];
  35. } else {
  36. result = null;
  37. }
  38. } else if (v instanceof String) {
  39. result = (String) v;
  40. } else {
  41. result = v.toString();
  42. }
  43.  
  44. return result;
  45. }
  46.  
  47. @Override
  48. public Map<String, String[]> getParameterMap() {
  49. return params;
  50. }
  51.  
  52. @Override
  53. public Enumeration<String> getParameterNames() {
  54. return new Vector<String>(params.keySet()).elements();
  55. }
  56.  
  57. @Override
  58. public String[] getParameterValues(String name) {
  59. String[] result = null;
  60.  
  61. Object v = params.get(name);
  62. if (v == null) {
  63. result = null;
  64. } else if (v instanceof String[]) {
  65. result = (String[]) v;
  66. } else if (v instanceof String) {
  67. result = new String[] { (String) v };
  68. } else {
  69. result = new String[] { v.toString() };
  70. }
  71.  
  72. return result;
  73. }
  74.  
  75. private void renewParameterMap(HttpServletRequest req) {
  76.  
  77. String queryString = req.getQueryString();
  78.  
  79. if (queryString != null && queryString.trim().length() > 0) {
  80. String[] params = queryString.split("&");
  81.  
  82. for (int i = 0; i < params.length; i++) {
  83. int splitIndex = params[i].indexOf("=");
  84. if (splitIndex == -1) {
  85. continue;
  86. }
  87.  
  88. String key = params[i].substring(0, splitIndex);
  89.  
  90. if (!this.params.containsKey(key)) {
  91. if (splitIndex < params[i].length()) {
  92. String value = params[i].substring(splitIndex + 1);
  93. this.params.put(key, new String[] { value });
  94. }
  95. }
  96. }
  97. }
  98. }
  99.  
  100. }

2. 转换filter

  1. package com.tmall.lafite.web.base;
  2.  
  3. import java.io.IOException;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6.  
  7. import javax.servlet.Filter;
  8. import javax.servlet.FilterChain;
  9. import javax.servlet.FilterConfig;
  10. import javax.servlet.ServletException;
  11. import javax.servlet.ServletRequest;
  12. import javax.servlet.ServletResponse;
  13. import javax.servlet.http.HttpServletRequest;
  14.  
  15. public class ParamFilter implements Filter {
  16.  
  17. @Override
  18. public void init(FilterConfig filterConfig) throws ServletException {
  19. // TODO Auto-generated method stub
  20.  
  21. }
  22.  
  23. @Override
  24. public void doFilter(ServletRequest request, ServletResponse response,
  25. FilterChain chain) throws IOException, ServletException {
  26. Map<String, String[]> m = new HashMap<String, String[]>(
  27. request.getParameterMap());
  28. request = new ParameterRequestWrapper((HttpServletRequest) request, m);
  29.  
  30. chain.doFilter(request, response);
  31. }
  32.  
  33. @Override
  34. public void destroy() {
  35. // TODO Auto-generated method stub
  36.  
  37. }
  38.  
  39. }

3. web.xml

  1. <!-- request参数转化器 -->
  2. <filter>
  3. <filter-name>ParameterFilter</filter-name>
  4. <filter-class>com.tmall.lafite.web.base.ParamFilter</filter-class>
  5. </filter>
  6. <filter-mapping>
  7. <filter-name>ParameterFilter</filter-name>
  8. <url-pattern>/*</url-pattern>
  9. <dispatcher>REQUEST</dispatcher>
  10. <dispatcher>FORWARD</dispatcher>
  11. </filter-mapping>

本文转自:http://blog.csdn.net/a9529lty/article/details/25478989

java修改request的paramMap的更多相关文章

  1. 修改Request 中的数据

    拦截器修改参数 今天一位网友开发中遇到一个需求,他需要在Request中修改传递过来的数据.开始的时候他在拦截器中修改,在拦截器中可以获取到从前台request中 传递过来的数据.他写法大致如下:自定 ...

  2. 看好你的门-客户端传数据-用java修改referer

    1.简单说明 Referer.origin用来表明,浏览器向WEB服务器表明自己来自哪里.但是就它本身而言,并非完全安全. 写一个例子,可以任意修改http信息头中的referer.origin 2. ...

  3. 使用Java修改Windows注册表

    使用Java修改Windows注册表,使用最基本的就是cmd命令. 事例和运行结果如下所示: package day01; import java.io.IOException; /* 1,reg a ...

  4. Java 修改Windows注册表,以实现开机自启动应用程序。

    使用Java修改Windows注册表,使用最基本的就是cmd命令. 事例和运行结果如下所示: package day01; import java.io.IOException; /* 1,reg a ...

  5. Fiddler中设置断点修改Request和Response

    Fiddler中设置断点修改Request Fiddler最强大的功能莫过于设置断点了,设置好断点后,你可以修改httpRequest 的任何信息包括host, cookie或者表单中的数据.设置断点 ...

  6. Java修改maven的默认jdk版本为1.7

    Java修改maven的默认jdk版本 问题: 1.创建maven项目的时候,jdk版本是1.5版本,而自己安装的是1.7或者1.8版本. 2.每次右键项目名-maven->update pro ...

  7. java获取request中的参数、java解析URL问号后的参数

    java获取request中的参数.java解析URL问号后的参数.有时候我们需要从request中获取参数,或者获取拼接在Url后面的参数,有时候一个一个去拿有点麻烦,一起拿出来放在一个map里面需 ...

  8. Fiddler设置断点修改Request和Response

    一.Fiddler中修改Request有两种方法:  点击Rules-> Automatic Breakpoint ->Before Requset (这种方法会中断所有的会话) 消除命令 ...

  9. ajax传JSON时设置的contenttype导致JAVA中request.getParameter("")怎么也接收不到数据

    ajax传JSON时设置的contenttype默认值是application/x-www-form-urlencoded, 当ajax传JSON时设置的contenttype 如果是applicat ...

随机推荐

  1. html5 svg 圆形进度条

    html5 svg 圆形进度条 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  2. 获取当前IP地址,跳转到对应城市网站。

    index.php文件 1,通过获取当前IP地址, 2,调用新浪AIP,获取到当前城市. 3,将中文转换为拼音后跳转. <?php include './pinyin.php'; //获取当前i ...

  3. hdu 4026 2011上海赛区网络赛F TSP ****

    没看过TSP,先mark //4838039 2011-10-27 23:04:15 Accepted 4026 2343MS 31044K 3143 B C++ Geners //状态压缩DP的TS ...

  4. [Oracle] 生产上表的列类型更新

    由于粗心,数据库脚本生成的时候错将一个类型NUMBER(5)的字段类型改为 VARCHAR2(5) 直接进行表修改会报错,因为数据已经存在,不能进行更新: ); 大体思路如下:       将要更改类 ...

  5. (四)WebRTC手记之本地音频采集

    转自:http://www.cnblogs.com/fangkm/p/4374668.html 上一篇博文介绍了本地视频采集,这一篇就介绍下音频采集流程,也是先介绍WebRTC原生的音频采集,再介绍C ...

  6. VMWARE虚拟机CentOS6.4系统使用主机无线网卡上网的三种方法介绍

    转自:http://www.jb51.net/network/98820.html 如何真正的实现VMWARE虚拟机CentOS6.4系统使用主机无线网卡上网   环境:WIN7旗舰版,台式机,U盘无 ...

  7. VS2010和matlab2010混合编程中char16_t重定义的问题

    原因是VS2010中的yvals.h添加了char16_t的定义,而Matlab的matrix.h也包含对char16_t的定义,所以同时包含这两个头文件的话,会导致重复定义char16_t的错误.只 ...

  8. Chrome书签被篡改之后的恢复

    chrome书签和备份存放的路径:(XXXX为用户名)(AppData文件夹为隐藏文件夹) \Users\XXXX\AppData\Local\Google\Chrome\User Data\Defa ...

  9. ontouchstart

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta cont ...

  10. LoadRunner之安装、破解、汉化教程(一)

    安装前,把所有的杀毒软件和防火墙关闭 安装前,把所有的杀毒软件和防火墙关闭 安装前,把所有的杀毒软件和防火墙关闭........     注意事项: 安装前,把所有的杀毒软件和防火墙关闭. 若以前安装 ...