如何使用wrapper在filter修改request参数

本文介绍了一种通过创建自定义的ParameterRequestWrapper类来修改HTTP请求参数的方法。此方法允许开发者在过滤器(Filter)中对传入的参数进行修改或添加,从而实现灵活地控制和处理请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在filter里如何修改提交的参数呢?

整个request接口是没有提供这样的API的,即使取出ParameterMap,也是只读的。

必须创建一个wrapper:class ParameterRequestWrapper,继承: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();
}
}


map, names, values, 一个都不能少啊。


在filter里,这样写:


HttpServletRequest request=(HttpServletRequest) req;
HashMap m=new HashMap(request.getParameterMap());
String fullURL = request.getRequestURI()+"?"+request.getQueryString();
if(matchURL(fullURL) && processParamsters(m)){
ParameterRequestWrapper wrapRequest=new ParameterRequestWrapper(request,m);
chain.doFilter(wrapRequest, resp);
}else{
chain.doFilter(req, resp);
}


matchURL是匹配url来决定是否生效,processParamsters是自定义函数,想怎么处理就怎么处理。

这样的话,经过filter之后,实际上request变成了ParameterRequestWrapper,以后的filter将会操作这个类。不过似乎用在ActionForward上有点问题,还没解决。

这也是j2ee推荐的办法,除了改参数外还可以作很多事,完全可以定制request。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值