网上都是getParameterMap取到的数据不能修改 但是我继承HttpServletRequestWrapper的类竟然修改成功了
看代码:
package com.uniresource.framework.security;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import org.springframework.web.util.HtmlUtils;
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
public XssHttpServletRequestWrapper(HttpServletRequest servletRequest) {
super(servletRequest);
}
public String[] getParameterValues(String parameter) {
String[] values = super.getParameterValues(parameter);
if (values==null) {
return null;
}
int count = values.length;
String[] encodedValues = new String[count];
for (int i = 0; i < count; i++) {
encodedValues[i] = cleanXSS(values[i]);
}
return encodedValues;
}
public String getParameter(String parameter) {
String value = super.getParameter(parameter);
if (value == null) {
return null;
}
return cleanXSS(value);
}
@Override
public Map getParameterMap() {
Map map=super.getParameterMap();
Set set=map.keySet();
Iterator iter=set.iterator();
while(iter.hasNext()){
String key=iter.next().toString();
Object obj=map.get(key);
String[] param=(String[])obj;
//String[] newParam=new String[param.length];
for(int i=0;i<param.length;i++){
String s=param[i];
param[i]=HtmlUtils.htmlEscape(s);
//newParam[i]=HtmlUtils.htmlEscape(s);
}
//map.put(key, newParam);
}
/*for(int i=0;i<map.size();i++){
Object obj=map.get(i);
if(obj instanceof String){
System.out.println(obj.toString());
}
}*/
return map;
}
public String getHeader(String name) {
String value = super.getHeader(name);
if (value == null)
return null;
return cleanXSS(value);
}
private String cleanXSS(String value) {
//You'll need to remove the spaces from the html entities below
value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;");
value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");
value = value.replaceAll("'", "& #39;");
value = value.replaceAll("eval\\((.*)\\)", "");
value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
value = value.replaceAll("script", "script");
value = HtmlUtils.htmlEscape(value);
return value;
}
}
所以就去查看了下org.apache.catalina.util.ParameterMap的源码 原来我的tomcat中这个类的locked是非锁定的。还是说现在的tomcat这个值都是非锁定状态的。
/* */ package org.apache.catalina.util;
/* */
/* */ import java.util.HashMap;
/* */ import java.util.Map;
/* */ import org.apache.tomcat.util.res.StringManager;
/* */
/* */ public final class ParameterMap<K, V> extends HashMap<K, V>
/* */ {
/* */ private static final long serialVersionUID = 1L;
/* 101 */ private boolean locked = false;
/* */
/* 129 */ private static final StringManager sm = StringManager.getManager("org.apache.catalina.util");
/* */
/* */ public ParameterMap()
/* */ {
/* */ }
/* */
/* */ public ParameterMap(int initialCapacity)
/* */ {
/* 64 */ super(initialCapacity);
/* */ }
/* */
/* */ public ParameterMap(int initialCapacity, float loadFactor)
/* */ {
/* 78 */ super(initialCapacity, loadFactor);
/* */ }
/* */
/* */ public ParameterMap(Map<K, V> map)
/* */ {
/* 90 */ super(map);
/* */ }
/* */
/* */ public boolean isLocked()
/* */ {
/* 109 */ return this.locked;
/* */ }
/* */
/* */ public void setLocked(boolean locked)
/* */ {
/* 121 */ this.locked = locked;
/* */ }
/* */
/* */ public void clear()
/* */ {
/* 145 */ if (this.locked) {
/* 146 */ throw new IllegalStateException(sm.getString("parameterMap.locked"));
/* */ }
/* 148 */ super.clear();
/* */ }
/* */
/* */ public V put(K key, V value)
/* */ {
/* 169 */ if (this.locked) {
/* 170 */ throw new IllegalStateException(sm.getString("parameterMap.locked"));
/* */ }
/* 172 */ return super.put(key, value);
/* */ }
/* */
/* */ public void putAll(Map<? extends K, ? extends V> map)
/* */ {
/* 189 */ if (this.locked) {
/* 190 */ throw new IllegalStateException(sm.getString("parameterMap.locked"));
/* */ }
/* 192 */ super.putAll(map);
/* */ }
/* */
/* */ public V remove(Object key)
/* */ {
/* 210 */ if (this.locked) {
/* 211 */ throw new IllegalStateException(sm.getString("parameterMap.locked"));
/* */ }
/* 213 */ return super.remove(key);
/* */ }
/* */ }
/* Location: E:\apache-tomcat-7.0.30\lib\catalina.jar
* Qualified Name: org.apache.catalina.util.ParameterMap
* Java Class Version: 6 (50.0)
* JD-Core Version: 0.5.3
*/
分享到:
相关推荐
首先,`request.getParameterMap()`方法返回的是一个`Map, String[]>`对象。这个映射中的键是参数名,值是一个`String`数组,代表该参数的所有值。当请求中有多个相同的参数名时,`getParameterMap()`会将这些参数的...
java request.getParameter中文乱码解决方法 在 Java Web 开发中,request....无论是通过转码、Tomcat 配置还是重写 `getParameter` 方法,我们都可以解决 request.getParameter() 获取 URL 中文参数乱码的问题。
`getParameterMap()`返回一个`Map, String[]>`,其中键是参数名,值是该参数的所有值(因为同一个参数名可能对应多个值)。 然而,需要注意的是,`HttpServletRequest`对象通常是只读的,直接修改`getParameterMap...
在`doFilter()`方法中,我们可以对`HttpServletRequest`的`getParameterMap()`方法返回的参数映射进行修改。这个映射包含了所有请求参数的键值对,其中键是参数名,值是一个字符串数组,因为同一个参数名可能对应多...
这通常发生在服务器端通过其他方式如反射(Reflection)或直接操作请求参数集合(例如`request.getParameterMap()`)来获取参数时。但这并不是一个良好的实践,因为这样做破坏了Web开发中数据提交和获取的标准约定。...
`getParameterMap()`方法返回的是一个`Map`对象,其中键是参数名,值是一个字符串数组,包含了对应参数的所有值。这是因为一个参数名可能对应多个值,例如在多选框或者复选框中,用户可以选中多个选项,这些选项会被...
public class ObjectUtil { //public static Object request2Obj(HttpServletRequest ... public static Map, Object> request2Map(HttpServletRequest request) { return request.getParameterMap(); } }
`getParameterMap()`则返回一个`java.util.Map, String[]>`,其中键是参数名,值是参数值数组。这是因为同一个参数名可能对应多个值,比如在多选框中。例如: ```java Map, String[]> parameterMap = request....
快速解决SpringMVC @RequestBody 用map接收请求参数的问题 在 SpringMVC 中,使用 @RequestBody 注解可以将请求体中的数据转换为 Java 对象,但是在使用 map 接收请求参数时,经常会遇到一些问题。本文将讨论如何...
Map, String[]> parameterMap = request.getParameterMap(); for (String key : parameterMap.keySet()) { String[] values = parameterMap.get(key); for (String value : values) { System.out.println("Key: ...
`request.getContextPath()`、`request.getMethod()`、`request.getProtocol()`、`request.getQueryString()`、`request.getRequestedSessionId()...getRequestURI()`、`request.getRemoteAddr()`和`request.getRemoteHost()`...
这个方法使用 `request.getParameterMap()` 方法获取参数,然后将参数转换为 UTF-8 编码,并将其存储在一个 Map 中。 总结 解决表单post,get到springMVC后台乱码的问题需要从多个方面进行调整,包括前台表单编码、...
Map, Object> formData = request.getParameterMap(); // 进行文件处理和表单数据处理... return ResponseEntity.ok("Form data and files successfully uploaded."); } ``` 在这个方法中,`request....
- `getParameterMap()`:返回一个`Map`,键是参数名,值是对应的参数值列表(如果参数有多个值,列表长度可能超过1)。 2. **处理表单数据**: - 当用户通过HTML表单提交数据时,Request对象同样能处理这些数据。...
Java 还提供了一个更方便的方法来获取所有请求参数,即使用 `request.getParameterMap()` 方法,该方法返回一个 `Map` 对象,其中包含所有的请求参数。 ```java Map, String[]> parameterMap = request....
例如,获取请求方法(`request.getMethod()`)、请求URI(`request.getRequestURI()`)、请求参数(`request.getParameterMap()`)等。这些信息在处理请求时非常有用,可以辅助我们理解用户的操作意图。 总的来说,通过对...
在Java Servlet中,可以使用`getParameter()`或`getParameterValues()`方法,但要注意,如果是POST请求,需要先调用`request.getParameter()`之前调用`request.getParameterNames()`或`request.getParameterMap()`以...
* Map getParameters() : 类似于 request.getParameterMap() 方法 * Map getApplication() : 返回 Map 对象,模拟 ServletContext 实例 * Map getSession() : 返回 Map 对象,模拟 HttpSession 实例 * void set...
4. Map,String[]> getParameterMap():取得一个请求参数的 Map。 除此之外,request 对象还提供了其他常用方法,例如: 1. void setCharacterEncoding(String encoding):设定编码格式,用来解决中文乱码问题(只...
2. **多文件上传**:虽然示例代码片段不完整,但可以看出`@RequestMapping(value="/uploadProFile",method=RequestMethod.POST)` 方法可能用于处理更复杂的文件上传场景,涉及多个文件以及额外的表单数据。...