`

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一样了 
分享到:
评论

相关推荐

    java修改请求参数

    本文将详细探讨如何在Java中修改请求参数,以及这样做的潜在风险和应对策略。 首先,`HttpServletRequest`对象是Java Servlet API提供用于获取请求信息的关键接口。通过这个接口,我们可以获取到请求参数,例如`...

    java web 修改request携带的参数信息

    虽然修改请求参数在某些场景下很有用,但需要注意的是,这可能会影响应用程序的安全性和性能。修改参数值可能破坏原有的业务逻辑,因此只应在必要时进行。同时,Filter的执行会增加服务器的处理时间,所以要优化...

    filter对request请求拦截,对请求参数进行修改

    对request请求进行拦截,对请求参数修改。常用于前台提交表单参数关键字的过滤。此工具可以对参数拦截并转义后提交到对应的处理类。 除了添加两个JsFilter.java和GetHttpServletRequestWrapper.java之外,需要在web....

    java 请求参数过滤拦截

    在Java开发中,请求参数过滤拦截是一个至关重要的环节,它涉及到系统的安全性、稳定性和数据的正确性。这里的“java请求参数过滤拦截”主要是指在接口接收到用户输入的数据时,通过过滤器(Filter)对参数进行检查,...

    JMeter beanShell修改http请求参数

    总之,JMeter结合BeanShell提供了一种强大的方式来处理复杂的测试逻辑,包括修改HTTP请求参数。通过引入自定义函数,获取并解析上一次请求的响应,以及动态构建参数,我们可以有效地模拟实际应用中的各种场景。

    AOP修改方法的参数

    3. **修改参数值**:在 `invoke` 方法内部,可以获取到方法的参数列表,并对其进行修改。 #### 三、代码示例 下面通过具体的代码示例来演示整个过程: ```java package org.amigo.proxy; public interface ...

    使用HttpServletRequestWrapper在filter修改request参数

    标题“使用HttpServletRequestWrapper在filter修改request参数”揭示了主要知识点,即如何在过滤器中通过自定义`HttpServletRequestWrapper` 子类来动态改变请求参数。这通常用于处理如数据验证、安全过滤、参数转换...

    修改请求参数 防止 SQL 注入、防止脚本注入

    "修改请求参数 防止 SQL 注入、防止脚本注入"这个主题聚焦于如何保护系统免受两种常见的攻击方式:SQL注入和跨站脚本(XSS)攻击。这两种攻击都利用了不安全的用户输入来执行恶意代码,可能对数据完整性、用户隐私...

    MyBatis拦截器分页与动态修改SQL及其参数值

    在这个主题中,我们将深入探讨如何利用MyBatis拦截器实现分页以及动态地修改SQL语句和参数值。 首先,我们关注的是"PaginationInterceptor.java",这是一个常见的分页拦截器实现。在MyBatis中,我们可以创建自定义...

    Spring拦截器,高级参数绑定

    高级参数绑定是指在Controller方法中,Spring MVC能够自动将请求参数绑定到方法参数上,包括基本类型、复杂对象甚至自定义类型。例如,可以使用`@RequestParam`、`@PathVariable`、`@RequestHeader`、`@RequestBody`...

    使用http发送form表单请求参数.doc

    在 Java 中,我们可以使用 HTTPClient 库来发送 Form 表单请求参数。 使用 HTTPClient 库发送 Form 表单请求参数 在上面的代码中,我们使用了 Apache 的 HTTPClient 库来发送 Form 表单请求参数。首先,我们创建了...

    java过滤器对所有参数去除前后空格

    对项目中的所有参数去除前后空格...可以基于此过滤器实现过滤跨站脚本攻击,参数的增加,修改!敏感词汇过滤。实现原理为重写HttpServletRequestWrapper,获取参数的方法。include和 Forwarded 内部转发不在过滤之内。

    Java中实现参数名ASCII码从小到大排序(字典序).doc

    - **创建HTTP请求签名**:在许多API服务中,为了验证请求的完整性,通常要求客户端按照特定顺序拼接请求参数并计算签名。例如,AWS的Signature Version 4签名过程就涉及参数排序。 - **构建URL查询字符串**:URL...

    jmeter5.0 解决请求参数中文乱码ApacheJMeter_http.jar

    这个修改过的jar文件应该包含了修复乱码问题的更新,可能是调整了请求参数的编码处理逻辑,使其能够正确识别和处理中文字符。用户只需将此修改后的`ApacheJMeter_http.jar`文件放到JMeter安装目录下的`lib/ext`子...

    Java修改密码实现

    - **EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)**:可以用来简化JSP页面中的Java代码,例如,EL用于获取请求参数,JSTL标签库可以用于数据处理和展示。 3. **MySQL数据库操作**:...

    JAVA发送POST请求,如何使用JAVA发送POST请求

    如果您正在寻找一份JAVA客户端发送POST请求的示例代码,那么我们的资源库将为您提供一切所需。...您可以根据自己的需求和场景,修改示例代码中的请求参数和响应处理方法,并将其应用到实际项目中。

    springboot 用aop打印web请求参数信息例子

    最后,确保你的`Demo18Application`或者其他启动类已经扫描到了`WebRequestLoggingAspect`类,这样在Web请求发生时,切面就会自动介入,打印出请求参数信息。 在实际项目中,你可能还需要考虑其他因素,比如日志的...

    java实现多层嵌套循环参数转换

    下面将详细讨论如何在Java中实现多层嵌套循环以及与之相关的参数转换和数据库配置。 首先,多层嵌套循环的基本概念是指在一个循环体内部嵌套另一个或多个循环,使得内层循环会根据外层循环的迭代次数多次执行。例如...

    在springboot中使用注解将值注入参数的操作

    Spring Boot 中使用注解将值注入参数的操作 Spring Boot 框架提供了强大的注解机制,允许开发者使用注解将值注入参数,从而简化代码编写和维护。本文将介绍如何在 Spring Boot 中使用注解将值注入参数,主要涵盖了...

Global site tag (gtag.js) - Google Analytics