Ce problème est dû (comme d'autres l'ont indiqué) à la persistance des attributs du modèle dans la chaîne de requête - ce qui n'est généralement pas souhaitable et risque de créer des failles de sécurité ainsi que des chaînes de requête ridicules. Ma solution habituelle est de ne jamais utiliser de chaînes de caractères pour les redirections dans Spring MVC, mais plutôt d'utiliser une RedirectView qui peut être configurée pour ne pas exposer les attributs du modèle (voir : http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/view/RedirectView.html )
RedirectView(String url, boolean contextRelative, boolean http10Compatible, boolean exposeModelAttributes)
J'ai donc tendance à utiliser une méthode util qui effectue une "redirection sûre", comme par exemple :
public static RedirectView safeRedirect(String url) {
RedirectView rv = new RedirectView(url);
rv.setExposeModelAttributes(false);
return rv;
}
L'autre option consiste à utiliser le XML de configuration des haricots :
<bean id="myBean" class="org.springframework.web.servlet.view.RedirectView">
<property name="exposeModelAttributes" value="false" />
<property name="url" value="/myRedirect"/>
</bean>
Encore une fois, vous pouvez abstraire ceci dans sa propre classe pour éviter les répétitions (par exemple, SafeRedirectView).
Une remarque à propos de "l'effacement du modèle" - ce n'est pas la même chose que de "ne pas exposer le modèle" dans toutes les circonstances. Un site sur lequel j'ai travaillé comportait de nombreux filtres qui ajoutaient des éléments au modèle, ce qui signifiait que l'effacement du modèle avant la redirection n'empêcherait pas l'apparition d'une longue chaîne de requête. Je dirais également que "ne pas exposer les attributs du modèle" est une approche plus sémantique que "effacer le modèle avant de rediriger".