Sesiones en Servlets y JSP. Ejemplo de login y logout

David Galisteo Cantero

Vamos a ver cómo manejar sesiones en Java con servlets y jsp’s, idóneo para hacer inicio de sesión en una aplicación web.

Bien, suponemos que ya tenemos creado nuestro proyecto web, vamos a crear un archivo jsp e introduciremos un formulario:

</form action="login" method="POST">
   </input type="text" name="user" value="usuario">
   </input type="password" name="password" value="contraseña">
   </input type="submit" value="Enviar">
</form>

Al pulsar en el botón “Enviar”, el navegador redigirá al servlet “login”, encargado de validar los datos:

public class login extends HttpServlet {
   ... 
   //metodo encargado de la gestión del método POST
    protected void processRequestPOST(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        HttpSession sesion = request.getSession();
        String usu, pass;
        usu = request.getParameter("user");
        pass = request.getParameter("password");
        //deberíamos buscar el usuario en la base de datos, pero dado que se escapa de este tema, ponemos un ejemplo en el mismo código
        if(usu.equals("admin") && pass.equals("admin") && sesion.getAttribute("usuario") == null){
            //si coincide usuario y password y además no hay sesión iniciada
            sesion.setAttribute("usuario", usu);
            //redirijo a página con información de login exitoso
            response.sendRedirect("loginExito.jsp");
        }else{
            //lógica para login inválido
        }
    }
 
   //método encargado de la gestión del método GET
    protected void processRequestGET(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        //me llega la url "proyecto/login/out"
        String action=(request.getPathInfo()!=null?request.getPathInfo():"");
        HttpSession sesion = request.getSession();
        if(action.equals("/out")){
            sesion.invalidate();
            response.sendRedirect("/home.jsp");
        }else{
 
        }
    }
 ...
}

Una vez logueados correctamente, vamos a la página “loginExito.jsp”, en esta, podemos mostrar el siguiente mensaje:

</p>Bienvenido ${sessionScope.usuario}</p>

Con esto último, accedo mediante EL (Expression Language) al contexto de sesión y extraigo el nombre de usuario.

Para “desloguear” vamos al método processRequestGET, donde tenemos la lógica encargada para ello, si vamos a la url “rutaProyecto/login/out” entraremos dentro del condicional y se invalidará nuestra sesión (logout).

Como apunte, si en algún lugar de nuestra aplicación necesitamos tener a un usuario logueado, ya sea en un panel de administración, por ejemplo, nuestra primera tarea será comprobar si hay una sesión iniciada, por ejemplo:

if(sesion.getAttribute("usuario") == null){
   //redirijo al login
}

Espero que os haya sido de ayuda.

HackSaludos!

Publicado el 24-02-2014

Compartelo!

21 comentarios

Deja un comentario

Comentanos

*
Ir arriba de la pagina