Autenticación con Tarjeta Universitaria UMU

PEDRO DELGADO YARZA 2014/01/29 13:53

En este tipo de autenticación tenemos que hacer uso de una librería desarrollada por PCI que nos permita acceder a la tarjeta universitara. Dicha librería se llama Applet Sestertium y debemos configurar nuestra aplicación para que haga uso de ella en caso de aplicar este tipo de autenticación.

Los pasos que debemos seguir para configurar la autenticación son los siguientes:

Para obtener el código HTML del applet, tenemos que utilizar el Servicio Sestertium, que internamente obtiene dicho código. Para eso, tenemos que hacer uso del componente authenticationManagerBean, que contendrá dicha llamada en su método de autenticación.

En Fundeweb 2.0 este componente ya está incluido en las librerías de autenticación por lo que no hará falta realizar modificaciones en el código Java.

   public class AuthenticationMethodCard extends AuthenticationMethod {
 
	private static final Log LOG = Logging.getLog(AuthenticationMethodCard.class);
 
	public boolean authenticate() {
		try {
			String dni = getServicioSestertiumUmu().getDniTarjeta(EnvironmentManagerBean.instance().getUserIP());
			LOG.info("Autenticando a: #0 - IP: #1", dni, EnvironmentManagerBean.instance().getUserIP());
			this.loadPersonaByIdentificador(dni);
			return true;
		} catch (ServiceNotFoundException snfe) {
			LOG.error("Error al buscar un servicio", snfe);
		} catch (SQLException se) {
			LOG.error("Error: al obtener el DNI del usuario de la tarjeta.", se);
		} catch (PersonaException pe) {
			LOG.error("Error: al obtener los datos del Usuario en GENTE.", pe);
			processErrorMessage();
		} catch (PersonaNotFoundException pnfe) {
			LOG.error("Error: el usuario no se encuentra en GENTE.", pnfe);
			processErrorMessage();
		}
		return false;
	}
 
	protected ServicioSestertiumUmu getServicioSestertiumUmu() throws ServiceNotFoundException {
		return (ServicioSestertiumUmu) BuscadorServiciosAtica.obtenerServicio(ServicioSestertiumUmu.ID);
	}
 
	/* (non-Javadoc)
	 * @see org.umu.atica.util.FundeWebManager#getLog()
	 */
	@Override
	protected Log getLog() {
		return LOG;
	}
 
   }

Al mismo tiempo se han incluido en la pantalla de login el código necesario para la importación de las librerías que leerán del lector la tarjeta de la universidad.

         <s:decorate id="pinField" template="/layout/displayLine.xhtml" rendered="#{authenticationManagerBean.cardAuthentication}">
		<s:decorate template="/layout/displayCell.xhtml">
			<ui:define name="label">#{messages['label.pin']}</ui:define>
			<ui:param name="styleClassLabel" value="name-cell-login" />
       			<ui:param name="styleClassValue" value="value-cell-login" />
			<h:inputSecret value="pass" styleClass="password-login" id="pin" size="4" maxlength="4" 
			disabled="#{!authenticationManagerBean.cardAuthentication}"/>
		</s:decorate>
       	</s:decorate>
 
           ....
           ....
           ....
 
 	<s:div id="extrasAuthenticationCardDiv">
		<!-- applet para leer de la tarjeta -->	
		<h:outputText id="sestertiumApplet" value="#{authenticationManagerBean.sestertiumApplet}" escape="false"
		rendered="#{authenticationManagerBean.cardAuthentication}"/>
	</s:div>