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?
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.
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
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);
}
Essayez de vérifier votre ServletResponse response
est un instanceof HttpServletResponse
ainsi:
if (response instanceof HttpServletResponse) {
response.sendRedirect(....);
}
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.