问题描述

今天做一个JavaWeb的小demo,关于过滤敏感词问题,前台的输入如果包含一些敏感词,后台会过滤处理改为 【 】 ,由过滤器来实现。
如果是由 getParameter(String s) 得到的数据,可以直接修改value值,将含有敏感词的部分替换为 【

但是如果是 getParameterMap()这种以map形式批量得到的数据,后台是不允许直接修改参数值的
即请求头和请求参数不能直接修改,也没有提供修改方法
如果在原来的map形式得到的请求参数中,用put方法修改参数值,则会抛出java.lang.IllegalStateException: 不允许修改锁定的参数映射。

问题解决

最后的处理办法是:
方法一:用HashMap(Map<? extends K,? extends V> m),重新new一个map,在新的map中修改值,并返回新的map
方法二:在过滤器中使用HttpServletRequestWrapper包装类中重写getParameterMap()方法,用一个新的map替换原来request里的map,达到修改目的。

  1. //通过new一个新的map来装原本的数据,这样就可以修改新表了
  2. //创建Student对象,用于封装提交的数据
  3. Student student = new Student();
  4. String id = req.getParameter("pid");
  5. Map paramap = req.getParameterMap();
  6. Map<String,String[]> newMap = new HashMap<>();
  7. newMap.putAll(paramap);
  8. newMap.remove("pid");

当需要把前端提交的数据删除的时候,就需要这样包装。