¿Cómo puedo obtener la URL de solicitud de un filtro de Java?

81

Estoy intentando escribir un filtro que pueda recuperar la URL de la solicitud, pero no estoy seguro de cómo hacerlo.

Esto es lo que tengo hasta ahora:

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class MyFilter implements Filter {
    public void init(FilterConfig config) throws ServletException { }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        chain.doFilter(request, response);

        String url = ((HttpServletRequest) request).getPathTranslated();
        System.out.println("Url: " + url);
    }

    public void destroy() { }
}

Cuando llego a una página en mi servidor, la única salida que veo es "Url: null".

¿Cuál es la forma correcta de obtener la URL solicitada de un objeto ServletRequest determinado en un filtro?

ampersandre
fuente

Respuestas:

184

¿Es esto lo que estás buscando?

if (request instanceof HttpServletRequest) {
 String url = ((HttpServletRequest)request).getRequestURL().toString();
 String queryString = ((HttpServletRequest)request).getQueryString();
}

Para reconstruir:

System.out.println(url + "?" + queryString);

Información sobre HttpServletRequest.getRequestURL()y HttpServletRequest.getQueryString().

Buhake Sindi
fuente
5
getRequestURL()devuelve StringBuffer, no String.
BalusC
1
Es mejor considerar el patrón de nulo queryString.
Kazuhiro Sera
3
Si desea eliminar la parte " blabla: 8080 ", getRequestURI () ('I' not 'l') devuelve una cadena que comienza con "/"
Alexander Taylor
Si desea solo la ruta al servlet que puede usar request.getServletPath(), es útil en JavaServer Faces para recuperar el equivalente de la identificación de la vista (la ruta desde la raíz de la aplicación web a la página xhtml, excluyendo dominios, prefijo de implementación, etc.)
José Roberto Araújo Júnior
4

Sobre la base de otra respuesta en esta página ,

public static String getCurrentUrlFromRequest(ServletRequest request)
{
   if (! (request instanceof HttpServletRequest))
       return null;

   return getCurrentUrlFromRequest((HttpServletRequest)request);
}

public static String getCurrentUrlFromRequest(HttpServletRequest request)
{
    StringBuffer requestURL = request.getRequestURL();
    String queryString = request.getQueryString();

    if (queryString == null)
        return requestURL.toString();

    return requestURL.append('?').append(queryString).toString();
}
Brad Parks
fuente
1
request.getRequestURL();   
jmj
fuente
1
ServletRequest no implementa getRequestURL (). Debe enviarlo a HttpServletRequest si es posible según la respuesta de Buhake
Anthony Hayward
1
sus parámetros faltantes
Stepan Yakovenko