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:
- Implementar
javax.servlet.Filter
. - En
doFilter()
método, emitir el entranteServletRequest
aHttpServletRequest
. - Usar
HttpServletRequest#getRequestURI()
para agarrar el camino. - uso sencillo
java.lang.String
métodos comosubstring()
,split()
,concat()
y así sucesivamente para extraer la parte de interés y componer el nuevo camino. - Utilizar cualquiera
ServletRequest#getRequestDispatcher()
y luegoRequestDispatcher#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 entranteServletResponse
aHttpServletResponse
y luegoHttpServletResponse#sendRedirect()
para redirigir la respuesta a la nueva URL (redireccionamiento del lado del cliente, reflejado en la barra de direcciones del navegador). - Registrar el filtro en
web.xml
en unaurl-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