HttpServletRequest
一部のパラメータを削除/変更する必要があります。数日前に投稿した質問Filter
に基づいて、そうしようとしています。
で、次のようにクラスを継承しFilter
てラップしようとしています。HttpServletRequest
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.
}
}
これは、クラス内の内部Filter
クラスです。このdoFilter()
方法では、
chain.doFilter(new FilteredRequest(request), (HttpServletResponse)response);
上記のクラスのコンストラクターが呼び出されています(リクエストをラップします)。
さて、 SpringMVCコントローラークラスでリクエストパラメーターのいずれかが変更/設定解除されることを期待しています。次のように、コントローラークラスのパラメーターを削除しようとしています。
Map requestMap=request.getParameterMap();
requestMap.remove("txt_country_name");
または、
requestMap.put("txt_country_name", null);
したがって、リクエストパラメータは削除するtxt_country_name
必要がありますが、削除されません(また、「ロックされたパラメータマップへの変更は許可されていませんHttpServletRequest
」などの例外もスローされません)。ここで何が欠けていますか?私は間違った方法に従っていますか?
ちなみに、アプリケーション全体で常にリクエスト属性を作成/使用することは、最善の解決策ではないようです。
[ Spring MVCコントローラークラス内ではなく、 SpringMVCコントローラークラス内でリクエストパラメーターを削除/変更する必要がありFilter
ます]