java修改请求参数的值

异常

java.lang.IllegalStateException: No modifications are allowed to a locked ParameterMap。网上查了一些资料,解决方案是使用Wrapper,重写HttpServletRequestWrapper,如下:

Java代码   收藏代码
  1. package com.gdcn.bpaf.security.yale;  
  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. @SuppressWarnings("unchecked")  
  11. public class ParameterRequestWrapper extends HttpServletRequestWrapper {  
  12.   
  13.     private Map params;  
  14.   
  15.     public ParameterRequestWrapper(HttpServletRequest request, Map newParams) {  
  16.         super(request);  
  17.         this.params = newParams;  
  18.     }  
  19.   
  20.     public Map getParameterMap() {  
  21.         return params;  
  22.     }  
  23.   
  24.     public Enumeration getParameterNames() {  
  25.         Vector l = new Vector(params.keySet());  
  26.         return l.elements();  
  27.     }  
  28.   
  29.     public String[] getParameterValues(String name) {  
  30.         Object v = params.get(name);  
  31.         if (v == null) {  
  32.             return null;  
  33.         } else if (v instanceof String[]) {  
  34.             return (String[]) v;  
  35.         } else if (v instanceof String) {  
  36.             return new String[] { (String) v };  
  37.         } else {  
  38.             return new String[] { v.toString() };  
  39.         }  
  40.     }  
  41.   
  42.     public String getParameter(String name) {  
  43.         Object v = params.get(name);  
  44.         if (v == null) {  
  45.             return null;  
  46.         } else if (v instanceof String[]) {  
  47.             String[] strArr = (String[]) v;  
  48.             if (strArr.length > 0) {  
  49.                 return strArr[0];  
  50.             } else {  
  51.                 return null;  
  52.             }  
  53.         } else if (v instanceof String) {  
  54.             return (String) v;  
  55.         } else {  
  56.             return v.toString();  
  57.         }  
  58.     }  
  59. }  

 2.使用

Java代码   收藏代码
  1. //然后在另一个地方使用时,按下面这样用,假如我要修改username的值  
  2.   
  3. HashMap m=new HashMap(request.getParameterMap());    
  4. /* 
  5. 关键部分,如果不转换成String数组,如果在下面这样是有时: 
  6. eg: 
  7. HttpSession session = request.getSession(); 
  8. Map map = request.getParameterMap(); 
  9. Set keySet = map.keySet(); 
  10. for (Iterator iterator = keySet.iterator(); iterator.hasNext();) 
  11. { 
  12. String key = (String)iterator.next(); 
  13. String values[] = (String[])map.get(key);  //这个地方就会报错,因为username一个String不能转换成String数组 
  14. if (values.length == 1) 
  15.     session.setAttribute(key, values[0]); 
  16. else 
  17.     session.setAttribute(key, values); 
  18. } 
  19. 异常 
  20. 就会出现java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.String; 
  21. */  
  22. //m.put("username", newusername);  //这样会报错  
  23. m.put("username"new String[]{newusername});  //这就是对的  
  24. HttpServletRequest req = (HttpServletRequest) request;   
  25. com.gdcn.bpaf.security.yale.ParameterRequestWrapper wrapRequest=new com.gdcn.bpaf.security.yale.ParameterRequestWrapper(req,m);     
  26. request=wrapRequest; //这是rquest就和本身的request一样了 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值