2011-03-15 20 views
43

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?¿Cómo redirigir en un filtro de servlet?

Respuesta

60

En la respuesta del filtro es de ServletResponse en lugar de HttpServletResponse . Por lo tanto, haga el cast a HttpServletResponse.

HttpServletResponse httpResponse = (HttpServletResponse) response; 
httpResponse.sendRedirect("/login.jsp"); 

Si se utiliza una ruta de contexto:

httpResponse.sendRedirect(req.getContextPath() + "/login.jsp"); 

También no se olvide de llamar return; al final.

+0

¿Hay una manera de resolver la ruta JSP utilizando un ViewResolver interior de un filtro? – FelipeKunzler

+0

solo funciona si la solicitud proviene del navegador. Es una redirección externa. –

1

a tratar de comprobar su ServletResponse response es un instanceof HttpServletResponse así:

if (response instanceof HttpServletResponse) { 
    response.sendRedirect(....); 
} 
+0

hay necesidad como método de filtro es 'public void doFilter (solicitud de HttpServletRequest, \t \t \t HttpServletResponse respuesta, cadena FilterChain) \t \t \t lanza IOException, ServletException { ' –

+0

@ToKra Eso no es la firma del método, y los resultados en un error de compilación. –

0

Su objeto respuesta está declarada como una ServletResponse. Para usar el método sendRedirect(), debe convertirlo al HttpServletResponse. Esta es una interfaz extendida que agrega métodos relacionados con el protocolo HTTP.

+0

método de filtros ya tiene que 'pública doFilter vacío (solicitud de HttpServletRequest, \t \t \t HttpServletResponse respuesta, la cadena FilterChain) \t \t \t throws IOException, ServletException {' –

8

Estoy tratando de encontrar un método para redirigir mi solicitud de filtro a la página de acceso

¿No

Sólo invoca

chain.doFilter(request, response); 

del filtro y el flujo normal continuará.

No sé cómo redirigir a partir servlet

Puede utilizar

response.sendRedirect(url); 

para redirigir desde servlet

+8

Es sin embargo útil si desea cancelar la solicitud debido a que el usuario no está conectado. – BalusC

+0

'response' es del tipo' ServletResponse' y se debe convertir en 'HttpServletResponse'. Ejemplo: 'HttpServletResponse resp = (HttpServletResponse) de respuesta;' ' resp.sendRedirect ("nombre_plantilla || pathName");' – Andrius

5

Si también desea mantener hash y obtener parámetros, se puede hacer algo como esto (llene redirectMap en init filtro):

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); 
} 
Cuestiones relacionadas