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?
Réponses
Trop de publicités?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.
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
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);
}