— PEDRO DELGADO YARZA 2014/01/29 13:55
La suplantación de identidad es el proceso por el que un usuario perteneciente a una aplicación, asume el papel de otro usuario (también perteneciente a la aplicación). Tras este proceso, las acciones que realice el suplantador y opciones que visualice, serán las que estén disponibles para el suplantado. Quedando registrado el suplantado como el usuario que las realiza en el log.
Para hacer una suplantación de identidad en Fundeweb 2.0, bastará con llamar al método emulateLoginSeam situado en la clase UmuIdentity, pasándole como parámetro el usuario que se quiere suplantar
/** * Emula un Login en SEAM ya que estamos Loggeados en el CAS * @param user usuario que queremos suplantar */ public void emulateLoginSeam(String user) { preAuthenticate(); this.clean(true); // Metemos el principal en el identiy la unica manera es esta (simula un login de Seam) this.acceptExternallyAuthenticatedPrincipal(new SimplePrincipal(user)); // El credential sin SESSION directo getCredentials().setUsername(user); postAuthenticate(); if (Events.exists()) { Events.instance().raiseEvent(EVENT_LOGIN_SUCCESSFUL); } }
Tras esta llamada, se llamará inmediatemente, en el UmuIdentityLoader, a toda la carga de datos asociados a ese usuario (al estar anotada por el método @Observer(“org.jboss.seam.security.loginSuccessful”)
En caso de que hayamos añadido algo al método loadDataAuthentication como se explica en la guia de autorizacion en habría modificar el código para hacer estas tareas antes de llamar al método emulateLoginSeam.
@In UmuIdentity identity; public void suplantarIdentidad(){ .... //Métodos previos a la emulación .... identity.emulateLoginSeam(user); }