¿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?

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().


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();
}

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.