JAvaリクエストパラメータの値の変更

2988 ワード

異常
java.lang.IllegalStateException: No modifications are allowed to a locked ParameterMap.ネット上でいくつかの資料を調べましたが、解決策はWrapperを使用して、HttpServiceletRequestWrapperを書き換えることです.以下のようにします.
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