Saltar al contenido

¿Cómo usar un filtro de servlet en Java para cambiar una URL de solicitud de servlet entrante?

Este equipo de trabajo ha pasado horas investigando soluciones a tu interrogante, te compartimos la respuestas y nuestro objetivo es servirte de mucha ayuda.

Solución:

  1. Implementar javax.servlet.Filter.
  2. En doFilter() método, emitir el entrante ServletRequest a HttpServletRequest.
  3. Usar HttpServletRequest#getRequestURI() para agarrar el camino.
  4. uso sencillo java.lang.String métodos como substring(), split(), concat() y así sucesivamente para extraer la parte de interés y componer el nuevo camino.
  5. Utilizar cualquiera ServletRequest#getRequestDispatcher() y luego RequestDispatcher#forward() para reenviar la solicitud/respuesta a la nueva URL (redireccionamiento del lado del servidor, no reflejado en la barra de direcciones del navegador), o emitir el entrante ServletResponse a HttpServletResponse y luego HttpServletResponse#sendRedirect() para redirigir la respuesta a la nueva URL (redireccionamiento del lado del cliente, reflejado en la barra de direcciones del navegador).
  6. Registrar el filtro en web.xml en una url-pattern de /* o /Check_License/*, dependiendo de la ruta de contexto, o si ya está en Servlet 3.0, use el @WebFilter anotación para eso en su lugar.

No olvide agregar una verificación en el código si la URL necesidades a cambiar y si no, entonces solo llama FilterChain#doFilter(), de lo contrario se llamará a sí mismo en un bucle infinito.

Alternativamente, también puede usar una API de terceros existente para hacer todo el trabajo por usted, como UrlRewriteFilter de Tuckey, que se puede configurar de la misma manera que lo haría con Apache. mod_rewrite.

Puede usar el filtro de reescritura de URL listo para usar con una regla como esta:


  ^/Check_License/Dir_My_App/Dir_ABC/My_Obj_([0-9]+)$
  /Check_License?Contact_Id=My_Obj_$1

Consulte los Ejemplos para ver más… ejemplos.

Un filtro JSF Url Prettyfier simple basado en los pasos de la respuesta de BalusC. El filtro reenvía todas las solicitudes que comienzan con la ruta /ui (suponiendo que tiene todos sus archivos xhtml almacenados allí) a la misma ruta, pero agrega el sufijo xhtml.

public class UrlPrettyfierFilter implements Filter 

    private static final String JSF_VIEW_ROOT_PATH = "/ui";

    private static final String JSF_VIEW_SUFFIX = ".xhtml";

    @Override
    public void destroy() 

    

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException 
        HttpServletRequest httpServletRequest = ((HttpServletRequest) request);
        String requestURI = httpServletRequest.getRequestURI();
        //Only process the paths starting with /ui, so as other requests get unprocessed. 
        //You can register the filter itself for /ui/* only, too
        if (requestURI.startsWith(JSF_VIEW_ROOT_PATH) 
                && !requestURI.contains(JSF_VIEW_SUFFIX)) 
            request.getRequestDispatcher(requestURI.concat(JSF_VIEW_SUFFIX))
                .forward(request,response);
         else 
            chain.doFilter(httpServletRequest, response);
        
    

    @Override
    public void init(FilterConfig arg0) throws ServletException 

    


¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *