2.4 – Manejo de Sesión en Struts2

2.1.- Primeros Pasos
2.2.- La configuración de struts.xml
2.3.- La clase Action que desplegará la lista
2.4.- El Interceptor y la sesión

El Interceptor y la sesión

Ahora veremos como debe ser el interceptor. El código se muestra a continuación:

package ejemplos.struts2.inter;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import java.util.Map;
import ejemplos.struts2.beans.Usuario;
import ejemplos.struts2.utilidades.UsuarioHabilitado;

public class InterAutenticacion implements Interceptor {

  public void destroy() { }
  public void init() { }
  public String intercept(ActionInvocation actionInvocation) throws Exception {
      Map session = actionInvocation.getInvocationContext().getSession();
      Usuario usuario = (Usuario) session.get("usuario");
      if (usuario == null) {
          return Action.LOGIN;
      } else {
          Action action = (Action) actionInvocation.getAction();
          if (action instanceof UsuarioHabilitado) {
              ((UsuarioHabilitado) action).setUsuario(usuario);
          }
          return actionInvocation.invoke();
      }
  }
}

Se hacen algunas cosas interesantes, la primera de ellas es que se toma la sesión y se verifica si ya existe una instancia de la clase Usuario, buscando al objeto referenciado por la cadena «usuario».

        Map session = actionInvocation.getInvocationContext().getSession();
      Usuario usuario = (Usuario) session.get("usuario");
      if (usuario == null) {

Si todo está bien y se hace una petición a una acción a la que el usuario tiene permiso, entonces pasamos la referencia del objeto usuario a la acción para que la pueda usar. Para eso tenemos que hacer que nuestras acciones implementen de UsuarioHabilitado.

            Action action = (Action) actionInvocation.getAction();
          if (action instanceof UsuarioHabilitado) {
              ((UsuarioHabilitado) action).setUsuario(usuario);
          }

Implementar de esta interfaz podría permitirnos hacer una validación adicional, para aseguramos que solo cuando nuestras clases implementen a UsuarioHabilitado podran ser llamadas, de lo contrario se cambia el flujo al formulario de entrada. En nuestro ejemplo solo sirve para pasar los datos del usuario a la acción.

La interfaz se muestra a continuación:

package ejemplos.struts2.utilidades;
import ejemplos.struts2.beans.Usuario;

public interface UsuarioHabilitado {
  public void setUsuario(Usuario usuario);
}

Para descargar UsuarioHabilitado.java

En donde se declara un solo método setUsuario y servirá para pasar la referencia del objeto usuario que le corresponda al usuario que esta haciendo la petición de datos.

Y eso es todo. Ya podemos echar a andar nuestro ejemplo, no olvides como siempre, verificar que las clases que hemos creado estén en los paquetes correctos y si vas a crear tus propias clases sin copiar el código, no olvides ser cuidadoso con los nombres de tus clases al crear los archivos de configuración de Struts2, ya que es muy común equivocarse con las mayusculas y las cosas tardan en funcionar.

Al correr el ejemplo y después de pasar por el formulario de username y password deberá aparecer lo siguiente


Despues das click en desplegar lista


¡Aparace la lista de usuarios!

Pero si intentas llamar a DesplegarLista desde el navegador sin haber pasado por el formulario de entrada de forma directa…

http://localhost:8080/Struts2Ejemplo2/DesplegarLista.action

Podras ver como el marco de trabajo te envía nuevamente al formulario de entrada

(Quiza deberás reiniciar el servidor web para observar esto)

Es el interceptor el que se encargará de redirigir al usuario al formulario de entrada.

Este es un ejemplo bastante simple como podras ver, los flujos de redirección de páginas dependerán mucho de como diseñes tu aplicación. Espero que este ejemplo te sirva para darte una idea de como hacerlo.

Todo el código lo podras descargar de aqui.

(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = «//connect.facebook.net/en_US/all.js#xfbml=1»;
fjs.parentNode.insertBefore(js, fjs);
}(document, ‘script’, ‘facebook-jssdk’));

 

¡Listo! Eso es todo por el momento, espero que el ejemplo sea de utilidad. Hasta el próximo post.

2.1.- Primeros Pasos
2.2.- La configuración de struts.xml
2.3.- La clase Action que desplegará la lista
2.4.- El Interceptor y la sesión

12 comentarios en «2.4 – Manejo de Sesión en Struts2»

  1. Muchas gracias lo he aplicado a un proyecto y todo está perfecto. Ahora si quisiera q un botón cierre la session, como lo haría? de antemano, agradezco su respuesta.

    Responder
  2. Hola Neilvla, quizá lo que debes hacer es crear un link a un jsp que lo único que haga es llamar a un action que ponga en la session como nula la instancia usuario o bien invalidar la sesion. Despues mandar al visitante a la pagina de inicio, saludos

    Responder
  3. Gracias a este tutorial, hoy será un día mejor para mí, pues he entendido esto que ahora mismo necesitaba y veía complicado.
    Te explicas muy bien!! Miraré el resto.

    Responder

Deja un comentario

eleven − 6 =