java - filtros - ¿Cómo redirigir en un filtro de servlet?
filtros en java netbeans (5)
Estoy intentando encontrar un método para redirigir mi solicitud desde el filtro a la página de inicio de sesión
No lo hagas
Usted acaba de invocar
chain.doFilter(request, response);
del filtro y el flujo normal continuará.
No sé cómo redirigir desde servlet
Puedes usar
response.sendRedirect(url);
redirigir desde servlet
Estoy tratando de encontrar un método para redirigir mi solicitud desde el filtro a la página de inicio de sesión, pero no sé cómo redireccionar desde servlet. Busqué, pero lo que encuentro es el método sendRedirect()
. No puedo encontrar este método en mi respuesta en filtro. ¿Cuál es la causa? ¿Como puedo resolver esto?
En Filter, la respuesta es de ServletResponse
lugar de HttpServletResponse
.Hace el lanzamiento a HttpServletResponse
.
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/login.jsp");
Si usa una ruta de contexto:
httpResponse.sendRedirect(req.getContextPath() + "/login.jsp");
Tampoco te olvides de llamar a la return;
al final.
Pruebe y compruebe que su ServletResponse response
es una instanceof HttpServletResponse
como esta:
if (response instanceof HttpServletResponse) {
response.sendRedirect(....);
}
Si también quieres mantener hash y obtener un parámetro, puedes hacer algo como esto (completar redirectMap en 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);
}
Su objeto de respuesta se declara como ServletResponse
. Para usar el método sendRedirect()
, debe convertirlo a HttpServletResponse
. Esta es una interfaz extendida que agrega métodos relacionados con el protocolo HTTP.