JAvaリクエストパラメータの値の変更
2988 ワード
異常
java.lang.IllegalStateException: No modifications are allowed to a locked ParameterMap.ネット上でいくつかの資料を調べましたが、解決策はWrapperを使用して、HttpServiceletRequestWrapperを書き換えることです.以下のようにします.
2.使用
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