En las apliacaciones web habra paginas en donde el usuario podra accesar sin la necesidad de tener una sesion inicializada esto mas que nada por publicidad. ¿Porque? simple primero por publicidad debes mostrar y atrapar al cliente solo mostrando poca informacion y una vez cautivado el usuario debe registrarse e iniciar sesion para poder visualizar todo jeje asi que manos a la obra, en este caso teniamos que solo el home esta habilitado pero no el formulario para que se puedan registrar asi que modificaremos un poco nuestra clase de filtro de url y quedara asi:
//definimos a que url se va aplicar la restricción en este caso a todas las peticiones url
@WebFilter("*.xhtml")
//implementamos el filtro de servlet y agremos los metodos abstractos
public class SessionUrlFliters implements Filter{
//agregamos una variable filterConfig
FilterConfig fc;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//hacemos que la variable sea igual al filter config que recibe del index o home
fc = filterConfig;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
/*restriccion de urls*/
//agregamos el httpservletrequest haciendolo un casting e igualando al request que recibe como parametro de doFilter
HttpServletRequest req = (HttpServletRequest) request;
//agregamos el httpservletresponse haciendolo un casting e igualando al response que recibe como parametro de doFilter
HttpServletResponse res = (HttpServletResponse) response;
//sesion para recuperar las url que van llegando y hacer la comparacion
HttpSession session = req.getSession(true);
//variable para recibir la url de la peticion que sera igualado la variable req
String reqUrl = req.getRequestURL().toString();
//variable de acceso para loguearse en el sistema aqui pueden ir todas las url para accesar sin necesidad de comenzar sesion
//y por ende sera un array
String [] urlPermissions = new String[]{
//definimos el index o home (pagina de inicio)
"/faces/home.xhtml",
//definimos el formulario
"/faces/User/RegisterUser.xhtml"
};
//hacemos la condicional el cual modificaremos en el Bean y la variable donde esta el url es diferente a la consecuencia
if(session.getAttribute("userName") == null){
//agregamos una variable para la redirreccion de tipo booleano
boolean redirectionRequets = true;
//comprobacion en un bucle for de las url permitidas sin sesion
for(String item : urlPermissions){
//si contiene el item que son las url permitidas sin sesion
if(reqUrl.contains(item)){
//hacer la variable redirectionRequets falsa
redirectionRequets = false;
//una vez hecho esto finalizamos el ciclo for
break;
}
}
//hacemos la redireccion hacia home.xhtml desde la raiz y concatenamos
if(redirectionRequets){
res.sendRedirect(req.getContextPath()+"/faces/home.xhtml");
}else{
//permitimos la direccion
chain.doFilter(request, response);
}
}else{
//permitimos la direccion
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
//borramos el filter config
fc=null;
}
}
Asi tenemos habilitado el formulario para los registros.