Para impedir el acceso a las aplicaciones a usuarios que no tengan UUID, tenemos dos formas diferentes:
- Una forma, es en la clase AbstractAuthenticatorAction, en el método hasApplicationSpecificPermission() (por defecto, devuelve true). Este método se puede sobrescribir en la clase AuthenticatorAction. Este método se ejecuta antes de que finalice el proceso de autenticación.
- La otra forma, que es posterior al proceso de autenticación, se usa el método checkUserData() de la clase UmuIdentityLoader.
Veamos ahora la configuración para la segunda forma. Lo primero que necesitamos es activar la configuración de la siguiente forma, solo tendremos que añadir en la clase AuthenticationManagerBean la siguiente factoría:
package es.um.atica.XXXX.security.authentication;
...
import org.jboss.seam.annotations.Factory;
import es.um.atica.seam.security.authentication.Constants;
@Name( "authenticationManagerBean" )
@Scope( SESSION )
@Install( precedence = FRAMEWORK )
@BypassInterceptors
@Startup
public class AuthenticationManagerBean extends AbstractAuthenticationManagerBean {
...
@Factory( Constants.AUTHORIZATION_EXCEPTION_ON_USER_WITHOUT_UUID_NAME)
public boolean isThrowAuthorizationExceptionOnUserWithoutUuid() {
return true;
}
...
}
o podemos declarar la factoría en el fichero components.xml:
<factory name="es.um.atica.security.authentication.authorizationExceptionOnUserWithoutUUID" scope="EVENT" value="true"/>
Ya estaría todo, si en la aplicación, usamos directamente la clase UmuIdentityLoader, o nuestro IdentityLoader, extiende la clase UmuIdentityLoader y no sobrescribimos el método loadDataLoginSuccessful() de dicha clase.
Si en nuestro componente IdentityLoader, extiende la clase UmuIdentityLoader, pero sobrescribe método loadDataLoginSuccessful() (o el que tiene la anotación @Observer(Identity.EVENT_LOGIN_SUCCESSFUL)), entonces tendremos que añadir la llamada al método checkUserData(), después de la carga de roles/permisos y antes de salir del método.
Si en nuestro componente IdentityLoader, NO extiende la clase UmuIdentityLoader, entonces tendremos que añadir en nuestra clase, la lógica de esta comprobación que esta en la clase UmuIdentityLoader.
Si activamos esta configuración y el usuario no tiene UUID, la aplicación hará logout de la sesión y redirigirá el navegador web a la pagina de error de usuario no autorizado.