Ich versuche eine Methode zu finden, um meine Anfrage vom Filter zur Anmeldeseite umzuleiten, aber ich weiß nicht, wie ich von Servlet umleiten soll. Ich habe gesucht, aber was ich finde, ist sendRedirect()
Methode. Ich kann diese Methode auf meinem Antwortobjekt im Filter nicht finden. Was ist die ursache Wie kann ich das lösen?
In Filter lautet die Antwort ServletResponse
und nicht HttpServletResponse
. Führen Sie daher die Umwandlung zu HttpServletResponse
durch.
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/login.jsp");
Wenn Sie einen Kontextpfad verwenden:
httpResponse.sendRedirect(req.getContextPath() + "/login.jsp");
Vergessen Sie auch nicht, am Ende return;
Aufzurufen.
Ich versuche eine Methode zu finden, um meine Anfrage vom Filter zur Anmeldeseite umzuleiten
nicht
Du rufst nur an
chain.doFilter(request, response);
vom Filter und der normale Durchfluss wird fortgesetzt.
Ich kann nicht vom Servlet umleiten
Sie können verwenden
response.sendRedirect(url);
von Servlet umleiten
Wenn Sie auch Hash behalten und Parameter abrufen möchten, können Sie so etwas tun (füllen Sie redirectMap bei filter init):
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);
}
Versuche und überprüfe dein ServletResponse response
ist ein instanceof HttpServletResponse
wie so:
if (response instanceof HttpServletResponse) {
response.sendRedirect(....);
}
Ihr Antwortobjekt wird als ServletResponse
deklariert. Um die Methode sendRedirect()
zu verwenden, müssen Sie sie in HttpServletResponse
umwandeln. Dies ist eine erweiterte Schnittstelle, die Methoden für das HTTP-Protokoll hinzufügt.