`
javaEEdevelop
  • 浏览: 864025 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

java修改请求参数的值

 
阅读更多

异常

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

package com.gdcn.bpaf.security.yale;

import java.util.Enumeration;
import java.util.Map;
import java.util.Vector;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

@SuppressWarnings("unchecked")
public class ParameterRequestWrapper extends HttpServletRequestWrapper {

	private Map params;

	public ParameterRequestWrapper(HttpServletRequest request, Map newParams) {
		super(request);
		this.params = newParams;
	}

	public Map getParameterMap() {
		return params;
	}

	public Enumeration getParameterNames() {
		Vector l = new Vector(params.keySet());
		return l.elements();
	}

	public String[] getParameterValues(String name) {
		Object v = params.get(name);
		if (v == null) {
			return null;
		} else if (v instanceof String[]) {
			return (String[]) v;
		} else if (v instanceof String) {
			return new String[] { (String) v };
		} else {
			return new String[] { v.toString() };
		}
	}

	public String getParameter(String name) {
		Object v = params.get(name);
		if (v == null) {
			return null;
		} else if (v instanceof String[]) {
			String[] strArr = (String[]) v;
			if (strArr.length > 0) {
				return strArr[0];
			} else {
				return null;
			}
		} else if (v instanceof String) {
			return (String) v;
		} else {
			return v.toString();
		}
	}
}

 2.使用

//然后在另一个地方使用时,按下面这样用,假如我要修改username的值

HashMap m=new HashMap(request.getParameterMap());  
/*
关键部分,如果不转换成String数组,如果在下面这样是有时:
eg:
HttpSession session = request.getSession();
Map map = request.getParameterMap();
Set keySet = map.keySet();
for (Iterator iterator = keySet.iterator(); iterator.hasNext();)
{
String key = (String)iterator.next();
String values[] = (String[])map.get(key);  //这个地方就会报错,因为username一个String不能转换成String数组
if (values.length == 1)
	session.setAttribute(key, values[0]);
else
	session.setAttribute(key, values);
}
异常
就会出现java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.String;
*/
//m.put("username", newusername);  //这样会报错
m.put("username", new String[]{newusername});  //这就是对的
HttpServletRequest req = (HttpServletRequest) request; 
com.gdcn.bpaf.security.yale.ParameterRequestWrapper wrapRequest=new com.gdcn.bpaf.security.yale.ParameterRequestWrapper(req,m);   
request=wrapRequest; //这是rquest就和本身的request一样了

 

分享到:
评论
1 楼 JavaSon_caibi 2013-10-10  
public ParameterRequestWrapper(HttpServletRequest request, Map newParams) {  
        super(request);  
        this.params = newParams;  
    } 
这个地方启动报实例化异常 :???

相关推荐

    java修改请求参数

    可以动态修改表达提交参数,使之修改request.getParameterMap(),不报异常。

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

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

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

    一个非常棒的程序,用于修改request携带的参数信息。使用了filter等技术。

    java 请求参数过滤拦截

    java 干货,对接口参数进行中的特殊字符,如insert select * % 等进行判断,进行过滤.

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

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

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

    支持jmeter5.0 请求参数中文乱码,修改了jar源代码,直接放到lib/ext 覆盖即可

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

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

    java 实现http请求的四种方式工具类

    java模拟网络请求,get post put delete四种模式,请求头处理参数处理。此文件仅供大家参考,稍作修改即可。

    ReSign:修改请求参数值后自动重新计算签名值的burp扩展器

    一个可以在你修改请求参数值后,自动从新计算sign的burp插件。但是前提是你需要知道具体的算法细节,并且在插件的GUI中配置。BackgroundMore and more mobile developers begin to use the signature algorithm to ...

    java通过HttpServletRequest获取post请求中的body内容的方法

    本篇文章主要介绍了java通过HttpServletRequest获取post请求中的body内容的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    DataTables自行封装请求参数和返回数据的零耦合服务端分页示例(PHP&JAVA)

    本例子主要展示了自行封装请求参数和返回数据的用法,对后台的交互没有任何格式和命名限制。 基于Bootstrap 2.3.2,相关的其他插件包括图标控件FontAwesome、等待提示控件Spinjs(修改版)、弹窗控件lhgdialog(修改版) ...

    JAVA 微商城参数修改说明1

    (微信只在第一次请求,以后链接不 改则不会请求认证)参数说明:这两行就是上文需要在源码中替换的参数,如果第一次部署项目没成功,请重置appsecret参数网页授

    JAVA_API1.6文档(中文)

    java.awt.image 提供创建和修改图像的各种类。 java.awt.image.renderable 提供用于生成与呈现无关的图像的类和接口。 java.awt.print 为通用的打印 API 提供类和接口。 java.beans 包含与开发 beans 有关的类,...

    java源码包---java 源码 大量 实例

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java源码包2

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    Java 1.6 API 中文 New

    java.awt.image 提供创建和修改图像的各种类。 java.awt.image.renderable 提供用于生成与呈现无关的图像的类和接口。 java.awt.print 为通用的打印 API 提供类和接口。 java.beans 包含与开发 beans 有关的类,即...

    java的传值与传引用详解

    1. 简单类型是按值传递的 ... swap(int[] data, int a, int b) 方法在内部实际上是改变了 data 所指示的对象的成员数据,即上述讨论的第二种改变参数值的方法。希望大家能够举一反三,使用类似的方法来解决相关问题。

    JAVA上百实例源码以及开源项目源代码

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    JAVA上百实例源码以及开源项目

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    Java 模拟 get、post 向网站提交数据(HttpTest.java)

    运行环境jdk1.6,使用时,根据实际情况修改: map.put("userId", "320"); String temp = HttpTest.doPost("http://www.test.com/submit.jsp", map, "GBK");

Global site tag (gtag.js) - Google Analytics