debug_mode=ON

Buscar en

 
 

Autentificación Web usando Interceptor de Struts 2

Escrito por jferraz hace 1 años bajo una licencia de Creative Commons Creative Commons License
4668 visitas. Etiquetas: codigo, programacion, struts

Una de las características comunes de las aplicaciones Web suele ser la autentificación de usuarios para acceder a una zona más personalizada.

Gracias al Framework Struts 2 podemos usar los Interceptor para realizar esta acción.

Este es un artículo original de Jaime González en MasterdLabs

1. ¿Qué son los Interceptor?

Un Interceptor en Struts es un método que se ejecuta antes y después de la acción que se esta ejecutando. Este puede modificar el flujo de la acción.

2. ¿Cómo nos pueden ayudar en la autentificación de un usuario?

Como se ejecutan antes de la acción en curso, podemos configurar que el interceptor compruebe si el usuario esta autentificado y si no lo esta, redireccionar a la página de Login.

3. Crear el Interceptor

El Interceptor debe implementar la interface Interceptor, la cual tiene 3 métodos

  • public void init(): Se ejecuta justo después de crear el Interceptor.
  • public void destroy(), Se ejecuta antes de destruir el Interceptor.
  • public String intercept(ActionInvocation actionInvocation) throws Exception, Es el método que llama Struts

Para autentificar deberemos mirar si el usuario esta ya autentificado, y sino redireccionar al Login:

public class AuthenticationInterceptor implements Interceptor {

  public void destroy() {
  }

  public void init() {
  }

  public String intercept(ActionInvocation actionInvocation) throws Exception {
    Map session = actionInvocation.getInvocationContext().getSession();
    if (session.get("usuario") == null) {
      return Action.LOGIN;
    } else {
      return actionInvocation.invoke();
    }
  }
}

Si el usuario no se encuentra autentificado, devolvemos Action.LOGIN, esto impide que se ejecute la acción, dándola como resultado LOGIN.
Si el usuario si se encuentra autentificado, continuamos con el flujo normal de Struts, mediante la llamada a ActionInvocation.invoke().

4. Configurar Struts

Como en muchas aplicaciones web tenemos una parte pública y una con autentificación, este interceptor solo debería afectar a parte de las acciones. Para diferenciar una parte de otra en Struts podemos usar los paquetes:

<package name="administracion" extends="struts-default" >
</package>

Dentro de este paquete, declaramos el interceptor que hemos creado:

<interceptors>
  <interceptor name="authenticationInterceptor"
                class="es.masterd.internet.soloempleo.interceptor.AuthenticationInterceptor"/>                
     <interceptor-stack name="all-default">
     <interceptor-ref name="authenticationInterceptor" />
     <interceptor-ref name="defaultStack"/>
  </interceptor-stack>
</interceptors>

Lo declaramos como el interceptor por defecto:

<default-interceptor-ref name="all-default" />

Declaramos el resultado de login para todas las acciones:

<global-results>
  <result name="login">/jsp/administracion/login.jsp</result>
</global-results>

Ahora cualquier acción que añadamos dentro del paquete necesitara tener el usuario autentificado, sino, nos reenviara a la página de Login.

 

¡Votalo! 5 votos
¡Compártelo!

        

&nbps;

&nbps;

jferraz

Sobre jferraz

Este usuario no ha completado su perfil.

 
Regístrate o haz login para participar.
¿Todavía no conoces debugmodeon?
debugmodeon es la red social para profesionales de la informática
descubre debugmodeon
 

3 comentarios en "Autentificación Web usando Interceptor de Struts 2"

vladdy
vladdy escribió
hace 1 años

#1   

Interesante artículo pero tengo una observación
la acción de validar si un usuario es autentico se llama autenticar no autentificar
por lo tanto autentificación o autentificado no existen como definición
y las definiciones correctas son autenticación y autenticado (aun cuando
me parece que autenticado tampoco existe como palabra pero sería la aproximación correcta)

 

jsanca
jsanca escribió
hace 1 años

#2   

Muy cool yo he utilizado Struts 2 y los interceptores es un plus que no tienen por ejemplo SpringMVC, que solo cuenta con interceptores, pero se parecen mas a un Filter que un Interceptor, en fin.

BTW, parece que te falto al final un poco de codigo.
J

 

giro
giro escribió
hace 1 años

#3   

Yo tengo la interface UserAware para que un Action que necesite del usuario logeado solo tenga que implementarla.

public interface UserAware {
    public void setUser(User user);
}

En el AuthInterceptor tengo el siguiente código, para inyectar directamente el usuario en Action:

Action action = (Action) actionInvocation.getAction();
if (action instanceof UserAware) {
   ((UserAware) action).setUser(session.get("user"));
}

Así cualquier Action que implemente UserAware, ya no tiene que buscarlo en la session manualmente:

public class FooAction extends ActionSupport implements UserAware {
  private User user;
  public String execute() {
    return SUCCESS;
  }
  @Override
  public void setUser(User user) {
    this.user = user;
  }
}

Editado 3 veces. La última vez hace hace 1 años.

 
 
 
 

© Copyright 2008-2009 debug_mode=ON | Aviso legal | Contacto | FAQ | ¿Quiénes somos? |