Vistas de página en total

jueves, 11 de diciembre de 2014

Restricciones a la url

Pondremos en practica las restricciones a la url de la manera mas facil o sencilla posible pero eficiente. Suele pasar que en cualquier pagina o aplicacion debemos registranos y acceder a las demas paginas o datos pero si una aplicacion o sistema web no tiene restricciones cualquiera que este registrado o no puede acceder con simple facilidad y eso es algo inseguro y poco profesional asi que implementaremos una clase que haga las restricciones como sabran las lineas estan documentadas para su entendimiento no cabe recalcar que deben tener conocimientos previos de estos tipos de temas para su mejor entendimiento dicho esto agreamos la clase y quedara asi:

//definimos a que url se va aplicar la restriccion 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();
        //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 && ! reqUrl.contains("home.xhtml")){
            //hacemos la redireccion hacia home.xhtml desde la raiz y concatenamos
            res.sendRedirect(req.getContextPath()+"/faces/home.xhtml");
        }else{
            //permitimos la direccion
            chain.doFilter(request, response);
        }
    }
    @Override
    public void destroy() {
        //borramos el filter config
        fc=null;
    }
   
}


Y el managedBean se modificara y quedara asi:

@ManagedBean
@SessionScoped
public class ManagedBeanSesionLogin implements Serializable{
    private String userName;
    private String userPass;
    private Login login;
    private Session session;
    private Transaction transaction;
   
    public ManagedBeanSesionLogin() {
        //daremos un tiempo para la sesion si pasa del tiempo establecido se cerrara y haciendo el casting
        HttpSession timerSession = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
        //tiempo de espera
        timerSession.setMaxInactiveInterval(300);
    }
   
    public String beginSession(){
        /*inicializamos para asegurarnos*/
        session = null;
        transaction = null;
       
        try {
            /*instanciamos los objetos*/
             loginDAO daoLogin = new loginDAO();
             //abrimos sesion de conexcion
             session = HibernateUtil.getSessionFactory().openSession();
             //creamos la transaccion y la comenzamos
             transaction = session.beginTransaction();
             //intanciamos el objeto
             Login login = daoLogin.getByUserName(session, userName);
             //valida si es que existe el usuario
             if(login != null){
                 //valida que la contraseña sea la misma
                 if(login.getPass().equals(Encrypting.encrypting(userPass))){
                     //creamos una session de http para los filtros de url no pude implementarlo de otra manera
                     HttpSession httpS = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
                     //agregamos el atributo a la variable
                     httpS.setAttribute("userName", userName);
                     //si todo es valido manda a la pagina
                     return "/User/viewAll";
                 }
             }          
             transaction.commit();//cerrar transaccion
             userName = null;
             userPass = null;
             //mandar mensaje de error de datos
             FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error de Acceso", "Datos Incorecctos"));
             //retornar
             RequestContext.getCurrentInstance().execute("cleanForm('loginForm')");
             return "/home";
        } catch (Exception e) {
            //verificamos sino hay ya una transaccion ya definida
            if(transaction != null){
                //si lo hay haremos que todo se revierta en la BD y que como estaba antes de utilizar este metodo
                transaction.rollback();
            }
             FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Error Fatal", "Contacte con su administrador "+e.getMessage()));
             login = new Login();
             return null;
        }finally{
            //verificamos sino hay ya una session ya definida
            if(session != null){
                //si lo hay cerramos la session
                session.close();
            }
        }
    }
    public String closeSession() {
        userName = null;
        userPass = null;
         //creamos una session de http para los filtros de url no pude implementarlo de otra manera
         HttpSession httpS = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
         //borramos las session almacenadas
         httpS.invalidate();
        return "/home";
    }
   
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUserPass() {
        return userPass;
    }
    public void setUserPass(String userPass) {
        this.userPass = userPass;
    }  
}


Listo así nadie podrá redirigirse a otra pagina que no sea home siempre y cuando no haya inicialisado session

No hay comentarios:

Publicar un comentario