58 votes

Comment rediriger dans un filtre de servlet ?

J'essaie de trouver une méthode pour rediriger ma demande d'un filtre vers la page de connexion mais je ne sais pas comment rediriger depuis le servlet. J'ai cherché mais ce que je trouve est la méthode sendRedirect() Je ne trouve pas cette méthode sur mon objet de réponse dans le filtre. Quelle est la cause ? Comment puis-je resoudre ceci?

86voto

Dead Programmer Points 5428

Dans Filter, la réponse est de ServletResponse plutôt que de HttpServletResponse . Par conséquent, faites le casting à HttpServletResponse .

 HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/login.jsp");

Si vous utilisez un chemin de contexte :

 httpResponse.sendRedirect(req.getContextPath() + "/login.jsp");

N'oubliez pas non plus d'appeler return; à la fin.

13voto

Jigar Joshi Points 116533

J'essaie de trouver une méthode pour rediriger ma demande du filtre vers la page de connexion

Ne pas

tu viens d'invoquer

 chain.doFilter(request, response);

du filtre et le débit normal se poursuivra.

Je ne sais pas comment rediriger depuis la servlet

Vous pouvez utiliser

 response.sendRedirect(url);

rediriger depuis la servlet

10voto

user1079877 Points 703

Si vous souhaitez également conserver le hachage et obtenir le paramètre, vous pouvez faire quelque chose comme ceci (remplir redirectMap à l'initialisation du filtre) :

 String uri = request.getRequestURI();

String[] uriParts = uri.split("[#?]");
String path = uriParts[0];
String rest = uri.substring(uriParts[0].length());

if(redirectMap.containsKey(path)) {
    response.sendRedirect(redirectMap.get(path) + rest);
} else {
    chain.doFilter(request, response);
}

2voto

Buhake Sindi Points 38654

Essayez et vérifiez que votre ServletResponse response est un instanceof HttpServletResponse comme ceci :

 if (response instanceof HttpServletResponse) {
    response.sendRedirect(....);
}

1voto

jan.vdbergh Points 1024

Votre objet de réponse est déclaré en tant que ServletResponse . Pour utiliser la sendRedirect() , vous devez la convertir en HttpServletResponse . Il s'agit d'une interface étendue qui ajoute des méthodes liées au protocole HTTP.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X