J'ai besoin de supprimer/modifier certaines HttpServletRequest
paramètres. J'essaie d'y parvenir en utilisant un fichier Filter
sur la base de la question J'ai posté il y a quelques jours.
En el Filter
J'essaie d'envelopper le HttpServletRequest
en héritant de la HttpServletRequestWrapper
comme suit.
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.
}
}
Il s'agit d'une classe interne au sein de la Filter
la classe. Dans le doFilter()
méthode,
chain.doFilter(new FilteredRequest(request), (HttpServletResponse)response);
le constructeur de la classe ci-dessus est invoqué (qui englobe la requête).
Maintenant, je m'attends à ce que n'importe lequel des paramètres de la requête soit modifié/annulé dans ma classe de contrôleur Spring MVC . J'essaie de supprimer le paramètre dans la classe du contrôleur comme suit.
Map requestMap=request.getParameterMap();
requestMap.remove("txt_country_name");
Alternativement,
requestMap.put("txt_country_name", null);
En conséquence, le paramètre de demande txt_country_name
doit être supprimé de la HttpServletRequest
mais il n'est pas supprimé (il ne lève pas d'exception comme " Aucune modification n'est autorisée sur une carte de paramètres verrouillée. "). Qu'est-ce qui m'échappe ici ? Est-ce que je suis un mauvais chemin ?
Au fait, Créer/utiliser un attribut de requête tout le temps dans l'ensemble de l'application ne semble pas être la meilleure solution. .
[Je dois supprimer/modifier le paramètre de la demande. dans la classe du contrôleur Spring MVC et non au sein de la Filter
lui-même]