如何修改HttpServletRequest

在后台获取到前台的request对象,如何修改新增request对象的值。

如何修改request对象的值

新建HttpServletRequest的一个装饰类

public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {
    Map<String, String[]> params = null;

    public MyHttpServletRequestWrapper(HttpServletRequest request, Map inParam) {
        super(request);
        params = new HashMap(inParam);
    }

    public void setParameter(String key,String value){
        params.put(key, new String[]{value});
    }
    public void setParameter(String key,String[] values){
        params.put(key, values);
    }

    @Override
    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 {
            return v.toString();
        }
    }

    @Override
    public Map<String, String[]> getParameterMap() {
        return params;
    }

    @Override
    public Enumeration<String> getParameterNames() {
        Vector l = new Vector(params.keySet());
        return l.elements();
    }

    @Override
    public String[] getParameterValues(String name) {
        return params.get(name);
    }
}

截获Http请求并装饰对象

public class MyFilter implements Filter{
    private static Log log = LogFactory.getLog(MyFilter.class);

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest http_req = (HttpServletRequest)req;
        MyHttpServletRequestWrapper myHttpServletRequestWrapper = new MyHttpServletRequestWrapper(http_req, req.getParameterMap());
        chain.doFilter(myHttpServletRequestWrapper, res);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void destroy() {
    }
}

在web.xml里定义拦截器

  <filter>
    <filter-name>ParameterFilter</filter-name>
    <filter-class>com.common.filter.MyFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>ParameterFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
  </filter-mapping>

最后就可以随意的使用了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值