我需要刪除/修改一些HttpServletRequest
參數。我試圖通過使用Filter
基於我前幾天發佈的question來實現。用Servlet修改HttpServletRequest參數過濾器似乎沒有工作
在Filter
中,我試圖通過繼承HttpServletRequestWrapper
類來包裝HttpServletRequest
,如下所示。
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.
}
}
這是Filter
類中的內部類。在doFilter()
方法,
chain.doFilter(new FilteredRequest(request), (HttpServletResponse)response);
上述類的構造函數被調用(即包裹請求)。
現在,我希望所有的請求參數修改/取消所有在我的Spring MVC控制器類。我試圖刪除控制器類中的參數,如下所示。
Map requestMap=request.getParameterMap();
requestMap.remove("txt_country_name");
或者,
requestMap.put("txt_country_name", null);
因此,請求參數txt_country_name
應從HttpServletRequest
被去除,但它不被除去(也不它拋出像「任何修改任何異常被允許鎖定ParameterMap「)。我在這裏錯過了什麼?我是否以錯誤的方式?
順便說一下,在整個應用程序中始終如一地創建/使用請求屬性似乎不是最好的解決方案。
[I需要刪除/修改請求參數春季MVC控制器類內,而不是內Filter
本身]
必須創建一個新的請求實例,設置值然後轉發它。 – Alfabravo 2012-07-25 21:56:59