java 修改 request参数值_修改request请求参数

本质上来讲,request请求当中的参数是无法更改的,也不能添加或者删除;

但在后台程序中,一般对request的参数的操作,都是通过request的getParameter、getParameterNames、getParameterValues等方法执行的;所以我们要是能重写这些方法,就从侧面改变了request的请求参数。恰好,servlet就提供了一个HttpServletRequestWrapper类来供大家去继承(该类是HttpServletRequest的封装类,public class HttpServletRequestWrapper extends ServletRequestWrapper implements

HttpServletRequest{}),重写request相关方法。

修改request参数的整体流程就是:会定义一个拦截器,在请求刚进入项目的时候,拦截住request,处理之后再将其放回。

案例如下:

//@WebFilter(filterName = "paramFilter", urlPatterns = "/*")//拦截器拦截所有请求

//@Order(100)//括号中的数字越大,在多个拦截器的执行顺序越靠前

public class ParamFilter extends OncePerRequestFilter{

@Override

protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

HttpServletRequest wrapper = new RequestWrapper(request);//定义一个新的request(名称是wrapper),

filterChain.doFilter(wrapper, response);//将修改过的request(wrapper)放回

}

private static class RequestWrapper extends HttpServletRequestWrapper {//这里用的是内部类,也可以不用

private Map params = new HashMap();//将request对象中的参数修改后,放在这个集合里,随后项目取的所有Parameter都是从这个集合中取数

public RequestWrapper(HttpServletRequest request) {//定义构造函数

super(request);//将request交给父类

//先通过request原生的方法,遍历获取到的参数

Enumeration enu=request.getParameterNames();

while (enu.hasMoreElements()) {

String paraName=(String)enu.nextElement();

Map paraObj = (Map)JSONUtils.parse(paraName);//因为我前台传过来的是json格式的参数

Set> entrySet = paraObj.entrySet();

for (Entry entry : entrySet) {

String key = entry.getKey();

Object value = entry.getValue();

params.put(key, value);//

}

}

//在这里修改params中的数据,不管是添加、修改

......

//将修改好的params重新放入RequestWrapper对象中

addParameters(request,params);

}

public void addAllParameters(MapotherParams) {//增加多个参数

for(Map.Entryentry : otherParams.entrySet()) {

addParameter(entry.getKey() , entry.getValue());

}

}

@Override

public String getParameter(String name) {

String[]values = params.get(name);

if(values == null || values.length == 0) {

return null;

}

return StringEscapeUtils.escapeHtml4(values[0]);

}

@Override

public Enumeration getParameterNames() {

Vector v = new Vector();

Set> entrySet = params.entrySet();

for (Entry entry : entrySet) {

v.add(entry.getKey());

}

Enumeration en = v.elements();

return v.elements();

}

@Override

public String[] getParameterValues(String name) {

return params.get(name);

}

}

}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值