domingo, 12 de diciembre de 2010

Quinta Semana

Esta semana, con las fiestas, solo hemos tenido dos días de curso. Estos días hemos terminado el blog que estábamos haciendo en Java y JSP, y hemos planteado el desarrollo de un chat con las mismas tecnologías.
Durante estos dos ejercicios, estamos reforzando las tecnologías de la parte del servidor, Java, JSP y acceso a base de datos y de la parte cliente, HTML y Javascript. También añadimos las librerías de reCAPTCHA y añadir a nuestras aplicaciones pluggins de Facebook.
Otra cosa importante que se ha explicado, para la autentificación de usuarios, es el concepto de sesión. La sesión la utilizamos en la parte del servidor mediante la interface HTTPSession.

Cuando creamos una aplicación web en Java, siempre que un usuario se conecta con su navegador a la aplicación, se crea un objeto HTTPSession en la memoria del servidor. Este objeto sesión, esta disponible durante todo el tiempo que el usuario esta navegando por la aplicación, de esta manera podemos almacenar objetos específicos para cada usuario durante el tiempo que estén conectados. La sesión se pierde, o se cierra, cuando el usuario cierra el navegador o da la orden a la aplicación de cerrar la sesión. A la sesión también se le puede indicar un tiempo de vida, por lo que se cerrara por el servidor transcurrido dicho intervalo de tiempo. 
Como hemos dicho anteriormente, hemos utilizado la sesión para autentificar a los usuarios. Por ejemplo:

01       HttpSession session = request.getSession( true );      
02       String txtUser = request.getParameter( "txtUser" );
03       String txtPassword = request.getParameter( "txtPassword" );
04 
05       try
06       {
07           //crear el driver
08           Class.forName( "com.mysql.jdbc.Driver" ).newInstance();
09           con = DriverManager.getConnection( "jdbc:mysql://localhost/prueba", "root", "" );
10           //obtener el statement
11           pstm = con.prepareStatement( "SELECT * FROM usuarios WHERE user = ? AND password = ?" );
12           pstm.setString( 1, txtUser );
13           pstm.setString( 2, 
14                   SHA.SHA( txtPassword ) );
15 
16           ResultSet rs = pstm.executeQuery();
17 
18           if( rs.next() ) {
19             user = new User();
20             user.setId( rs.getInt( "id" ) );
21             user.setUser( rs.getString( "user" ) );
22             user.setEmail( rs.getString( "email" ) );
23             user.setPassword( rs.getString( "password" ) );
24           }
25 
26           pstm.close();
27 
28           if( user != null )
29           {
30             nextPage = "/chat.jsp";
31           } else {
32             nextPage = "/index.jsp";
33           }
34 
35           session.setAttribute( "user", user );
36           request.getRequestDispatcher( nextPage ).forward( request, response );

Este ejemplo, corresponde a un servlet que controla el login de un usuario. Lo que hacemos en la linea 1 es obtener el objeto sesión del usuario. En las siguientes lineas lo que hacemos es comprobar con una consulta SQL si el usuario esta en la base de datos, y si esta crearnos un bean con la información del usuario. En las lineas 28 - 33, inicializamos la variable 'nextPage' dependiendo si el usuario esta creado o no. Y en la linea 35    insertamos el bean usuario en la sesión con el nombre 'user'. De esta manera tenemos el bean usuario durante todo el tiempo que el usuario este ejecutando la aplicación y podremos comprobar si ha pasado por el proceso de validación o no. El proceso de validación solamente consistira en comprobar que en la sesión el atributo de nombre 'user' no es null.

01         User user = (User)request.getSession( true ).getAttribute( "user" );
02         if( user == null ) {
03             request.getRequestDispatcher( "login" ).forward( request, response );
04         }

Poniendo este código en cada petición que haga el usuario al servidor, comprobamos si el usuario esta en la sesión o nos devuelve null, en cuyo caso redirigimos al usuario a la pantalla de autentificación de usuario, login.
Aquí hemos visto como utilizar el objeto sesión para guardar al usuario. Pero la sesión nos puede valer para guardar otros objetos que nos sean necesarios durante la ejecución de nuestra aplicación web para un usuario determinado, puede valernos como un contenedor de objetos útiles para el desarrollo de la aplicación. Otra utilidad, por ejemplo en una tienda online, puede ser guardar en la sesión información relativa al carrito de la compra, o un objeto List con la lista de las cosas que vamos a comprar.
Como ultimo comentario, decir que hay que procurar llegar a un termino medio a la hora de almacenar objeto en la sesión. Hay que tener en cuenta que la sesión es un objeto que consume recursos del servidor, si decidimos guardar todo en la sesión, y tenemos muchos usuarios conectados, supondrá un consumo de recursos en el servidor, mayormente memoria, por lo que tendremos que tenerlo en cuenta.

0 comentarios:

Publicar un comentario

Suscribirse a Enviar comentarios [Atom]

<< Inicio