`
wangshiyang
  • 浏览: 69360 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于tomcat,request.getParameterMap修改map值的问题

阅读更多
网上都是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()返回的是String []数组1

    首先,`request.getParameterMap()`方法返回的是一个`Map, String[]&gt;`对象。这个映射中的键是参数名,值是一个`String`数组,代表该参数的所有值。当请求中有多个相同的参数名时,`getParameterMap()`会将这些参数的...

    java request.getParameter中文乱码解决方法

    java request.getParameter中文乱码解决方法 在 Java Web 开发中,request....无论是通过转码、Tomcat 配置还是重写 `getParameter` 方法,我们都可以解决 request.getParameter() 获取 URL 中文参数乱码的问题。

    java修改请求参数

    `getParameterMap()`返回一个`Map, String[]&gt;`,其中键是参数名,值是该参数的所有值(因为同一个参数名可能对应多个值)。 然而,需要注意的是,`HttpServletRequest`对象通常是只读的,直接修改`getParameterMap...

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

    在`doFilter()`方法中,我们可以对`HttpServletRequest`的`getParameterMap()`方法返回的参数映射进行修改。这个映射包含了所有请求参数的键值对,其中键是参数名,值是一个字符串数组,因为同一个参数名可能对应多...

    request.getParameter()取值为null的解决方法

    这通常发生在服务器端通过其他方式如反射(Reflection)或直接操作请求参数集合(例如`request.getParameterMap()`)来获取参数时。但这并不是一个良好的实践,因为这样做破坏了Web开发中数据提交和获取的标准约定。...

    作业getParameterMap()

    `getParameterMap()`方法返回的是一个`Map`对象,其中键是参数名,值是一个字符串数组,包含了对应参数的所有值。这是因为一个参数名可能对应多个值,例如在多选框或者复选框中,用户可以选中多个选项,这些选项会被...

    根据数据库表自动产生javabean

    public class ObjectUtil { //public static Object request2Obj(HttpServletRequest ... public static Map, Object&gt; request2Map(HttpServletRequest request) { return request.getParameterMap(); } }

    request获取url以及其参数

    `getParameterMap()`则返回一个`java.util.Map, String[]&gt;`,其中键是参数名,值是参数值数组。这是因为同一个参数名可能对应多个值,比如在多选框中。例如: ```java Map, String[]&gt; parameterMap = request....

    快速解决SpringMVC @RequestBody 用map接收请求参数的问题

    快速解决SpringMVC @RequestBody 用map接收请求参数的问题 在 SpringMVC 中,使用 @RequestBody 注解可以将请求体中的数据转换为 Java 对象,但是在使用 map 接收请求参数时,经常会遇到一些问题。本文将讨论如何...

    window.open 函数的操作

    Map, String[]&gt; parameterMap = request.getParameterMap(); for (String key : parameterMap.keySet()) { String[] values = parameterMap.get(key); for (String value : values) { System.out.println("Key: ...

    JSP2_0技术学习笔记

    `request.getContextPath()`、`request.getMethod()`、`request.getProtocol()`、`request.getQueryString()`、`request.getRequestedSessionId()...getRequestURI()`、`request.getRemoteAddr()`和`request.getRemoteHost()`...

    解决表单post,get到springMVC后台乱码的问题

    这个方法使用 `request.getParameterMap()` 方法获取参数,然后将参数转换为 UTF-8 编码,并将其存储在一个 Map 中。 总结 解决表单post,get到springMVC后台乱码的问题需要从多个方面进行调整,包括前台表单编码、...

    java springboot 文件上传,多文件上传.zip

    Map, Object&gt; formData = request.getParameterMap(); // 进行文件处理和表单数据处理... return ResponseEntity.ok("Form data and files successfully uploaded."); } ``` 在这个方法中,`request....

    Request对象.pptx

    - `getParameterMap()`:返回一个`Map`,键是参数名,值是对应的参数值列表(如果参数有多个值,列表长度可能超过1)。 2. **处理表单数据**: - 当用户通过HTML表单提交数据时,Request对象同样能处理这些数据。...

    java 获取request中的请求参数代码详解

    Java 还提供了一个更方便的方法来获取所有请求参数,即使用 `request.getParameterMap()` 方法,该方法返回一个 `Map` 对象,其中包含所有的请求参数。 ```java Map, String[]&gt; parameterMap = request....

    Request中获取相关网络信息

    例如,获取请求方法(`request.getMethod()`)、请求URI(`request.getRequestURI()`)、请求参数(`request.getParameterMap()`)等。这些信息在处理请求时非常有用,可以辅助我们理解用户的操作意图。 总的来说,通过对...

    获取request的参数

    在Java Servlet中,可以使用`getParameter()`或`getParameterValues()`方法,但要注意,如果是POST请求,需要先调用`request.getParameter()`之前调用`request.getParameterNames()`或`request.getParameterMap()`以...

    struts2之Action访问Servlet API

    * Map getParameters() : 类似于 request.getParameterMap() 方法 * Map getApplication() : 返回 Map 对象,模拟 ServletContext 实例 * Map getSession() : 返回 Map 对象,模拟 HttpSession 实例 * void set...

    JSP 内置对象:request 对象.pptx

    4. Map,String[]&gt; getParameterMap():取得一个请求参数的 Map。 除此之外,request 对象还提供了其他常用方法,例如: 1. void setCharacterEncoding(String encoding):设定编码格式,用来解决中文乱码问题(只...

    MultipartHttpServletRequest_文件上传

    2. **多文件上传**:虽然示例代码片段不完整,但可以看出`@RequestMapping(value="/uploadProFile",method=RequestMethod.POST)` 方法可能用于处理更复杂的文件上传场景,涉及多个文件以及额外的表单数据。...

Global site tag (gtag.js) - Google Analytics