web-dev-qa-db-fra.com

Comment rediriger dans un filtre de servlet?

J'essaie de trouver une méthode pour rediriger ma demande du filtre vers la page de connexion, mais je ne sais pas comment rediriger depuis le servlet. J'ai cherché mais ce que je trouve c'est la méthode sendRedirect(). Je ne trouve pas cette méthode sur ma réponse obect dans le filtre. Quelle en est la cause? Comment puis-je résoudre ça?

49
wasimbhalli

Dans Filter, la réponse est de ServletResponse plutôt que HttpServletResponse. Par conséquent, le transtypage en 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.

73
Dead Programmer

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

Ne pas

Vous venez d'invoquer

chain.doFilter(request, response);

du filtre et le débit normal se poursuivra.

Je ne sais pas comment rediriger depuis le servlet

Vous pouvez utiliser

response.sendRedirect(url);

rediriger depuis le servlet

8
Jigar Joshi

Si vous souhaitez également conserver le hachage et obtenir le paramètre, vous pouvez faire quelque chose comme ça (remplissez redirectMap lors du lancement 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);
}
6
user1079877

Essayez de vérifier votre ServletResponse response est un instanceof HttpServletResponse ainsi:

if (response instanceof HttpServletResponse) {
    response.sendRedirect(....);
}
1
Buhake Sindi

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

0
jan.vdbergh