Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 使用Servlet过滤器修改HttpServletRequest参数不会';好像不行_Jsp_Servlets - Fatal编程技术网

Jsp 使用Servlet过滤器修改HttpServletRequest参数不会';好像不行

Jsp 使用Servlet过滤器修改HttpServletRequest参数不会';好像不行,jsp,servlets,Jsp,Servlets,我需要删除/修改一些HttpServletRequest参数。我正试图通过使用一个基于我几天前发布的过滤器来实现这一点 在Filter中,我试图通过继承HttpServletRequestWrapper类来包装HttpServletRequestWrapper,如下所示 private final static class FilteredRequest extends HttpServletRequestWrapper { public FilteredRequest(Servlet

我需要删除/修改一些
HttpServletRequest
参数。我正试图通过使用一个基于我几天前发布的
过滤器来实现这一点

Filter
中,我试图通过继承
HttpServletRequestWrapper
类来包装
HttpServletRequestWrapper
,如下所示

private final static class FilteredRequest extends HttpServletRequestWrapper {

    public FilteredRequest(ServletRequest request) {
        super((HttpServletRequest) request);
    }

    @Override
    public String getParameter(String paramName) {
        return super.getParameter(paramName);
    }

    @Override
    public String[] getParameterValues(String paramName) {
        return super.getParameterValues(paramName);
    }

    @Override
    public Map getParameterMap() {
        Map<Object, Object> parameterMap = new HashMap<Object, Object>();
        Map originalParameterMap = super.getParameterMap();

        for (Object o : originalParameterMap.entrySet()) {
            Map.Entry<Object, Object> pairs = (Entry<Object, Object>) o;
            parameterMap.put(pairs.getKey(), pairs.getValue());
        }
        return parameterMap;  //Returning a modifiable ParameterMap.
    }
}
Map requestMap=request.getParameterMap();
requestMap.remove("txt_country_name");
正在调用上述类的构造函数(包装请求)


现在,我希望在我的Spring MVC控制器类中修改/取消设置任何请求参数。我试图删除控制器类中的参数,如下所示

private final static class FilteredRequest extends HttpServletRequestWrapper {

    public FilteredRequest(ServletRequest request) {
        super((HttpServletRequest) request);
    }

    @Override
    public String getParameter(String paramName) {
        return super.getParameter(paramName);
    }

    @Override
    public String[] getParameterValues(String paramName) {
        return super.getParameterValues(paramName);
    }

    @Override
    public Map getParameterMap() {
        Map<Object, Object> parameterMap = new HashMap<Object, Object>();
        Map originalParameterMap = super.getParameterMap();

        for (Object o : originalParameterMap.entrySet()) {
            Map.Entry<Object, Object> pairs = (Entry<Object, Object>) o;
            parameterMap.put(pairs.getKey(), pairs.getValue());
        }
        return parameterMap;  //Returning a modifiable ParameterMap.
    }
}
Map requestMap=request.getParameterMap();
requestMap.remove("txt_country_name");
或者

requestMap.put("txt_country_name", null);
因此,请求参数
txt\u country\u name
应该从
HttpServletRequest
中删除,但它不会被删除(也不会引发任何异常,如“不允许修改锁定的参数映射”)。我错过了什么?我走错路了吗

顺便说一下,在整个应用程序中始终创建/使用请求属性似乎不是最好的解决方案


[我需要删除/修改Spring MVC控制器类中的请求参数,而不是在
过滤器本身中]

您的删除方法修改
getParameterMap()返回的可变映射。但是对
getParameterMap()
的下一个调用将重建一个新的可变映射,其中包含包装查询的所有参数


可变映射应该在构建
FilteredRequest
时构建,并且应该存储在实例字段中。

必须创建一个新的请求实例,设置值,然后转发它。