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
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.
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.
El Interceptor debe implementar la interface Interceptor, la cual tiene 3 métodos
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().
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.
Este usuario no ha completado su perfil.
vladdy escribió
hace 9 meses
jsanca escribió
hace 9 meses
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 escribió
hace 9 meses
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;
}
}
© Copyright 2008-2009 debug_mode=ON | Aviso legal | Contacto | FAQ | ¿Quiénes somos? |
#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)