Instalación de la librería utilizando Maven.
<dependency>
<groupId>org.viafirma</groupId>
<artifactId>viafirma-client</artifactId>
<version>[1.3.2,1.4.0)</version>
</dependency>
Nota: Es necesario que se añada al proyecto el repositorio http://repositorio.viavansi.com/repo, para que las dependencias sean correctamente resueltas.
El cliente Viafirma recupera cuando se inicia por primera vez un conjunto de parametros de configuración que espera encontrar como variables de entorno JNDI, Para que el sistema fucione correctamente, es necesario definir las siguientes variables en el contexto de la aplicación:
<!-- Parametros de configuración para la autenticación utilizando Viafirma.org -->
<Environment description="Url del proveedor de autenticación utilizado"
name="URL_PROVIDER_VIAFIRMA" override="false" type="java.lang.String"
value="http://viafirma.viavansi.com/viafirma-1.0-SNAPSHOT"/>
<Environment description="Configuración del Cliente: Url pública de la aplicación."
name="URL_APLICACION" type="java.lang.String" override="false"
value="http://localhost:8180/tramiton" />
<!-- Parametros de configuración para la firma de ficheros utilizando RMI desde Viafirma.org
<Environment description="Configuración del Cliente:URL del conector RMI utilizado para el proceso de firma"
name="URL_VIAFIRMA_RMI_CONECT" type="java.lang.String" override="false"
value="rmi://viafirma.viavansi.com:19111/conectorViafirmaRMI" />
-->
<!-- Para la conexión via Web Services -->
<Environment description="Configuración del Cliente:URL del conector WS utilizado para el proceso de firma"
name="URL_VIAFIRMA_RMI_CONECT" override="false" type="java.lang.String"
value="http://viafirma.viavansi.com/viafirma/services/ConectorFirmaRMI"/>
Puede la documentación JavaDoc del cliente de Firma en http://www.viafirma.org/viafirma-client/apidocs/org/viafirma/cliente/ViafirmaClient.html.
El método mas facil para integrar una aplicación servicio de autenticación es implementar un Filter que extienda del filter que ofrece el cliente de Viafirma. A continuación se muestra un ejemplo del código para la integración utilizando un filter J2EE.
/**
* Filtro que protege la zona de administración de la aplicación.
* El filtro extiende de AutentifacionViafirmaFilter y debe solo implementar los métodos:
* isAutenticado(...) : Que informa si la aplicación considera al usuario autenticado.
* Tipicamente comprueba si los datos del usuario estan en sessión.
* procesarAutenticacion(...) : Método que se invoca cuando el resultado de la autenticación
* ha sido satisfactorio y donde se entregan los datos del usuario
* para que la aplicación los procese y marque al usuario como logado.
*
*/
public class LoginAdminViafirma2Filter extends org.viafirma.cliente.filter.AutentifacionViafirmaFilter {
/**
* Comprobamos si el usuario esta logado.
*/
public boolean isAutenticado(HttpServletRequest request, HttpServletResponse response) {
boolean autenticado=(request.getSession().getAttribute(Constantes.USUARIO_ADMINISTRADOR)!=null);
return autenticado;
}
/**
* Inicia el proceso de autenticación del usuario administrador
*
*/
public boolean procesarAutenticacion(HttpServletRequest request, HttpServletResponse arg1, UsuarioGenericoViafirma usuarioViafirma) {
// Comprobamos el usuario tiene permisos para acceder al sistema
return true.
}
}
Una vez implementada la clase, solo es necesario definir el filter y el mapeo en el web.xml. A continuación se muestra un ejemplo de configuración en el que se protege con certificado toda la administración (localizada en /admin/* ):
<!-- Login con viafirma.org -->
<filter>
<description>
Sistema de seguridad para que todos los usuarios que
utilicen la Administración tengan que estar
logados en ViaFirma
</description>
<filter-name>LoginAdminFilter</filter-name>
<filter-class>
com.avansi.tramiton.filter.LoginAdminViafirma2Filter
</filter-class>
</filter>
<!-- Protegemos toda la administración de la aplicación -->
<filter-mapping>
<filter-name>LoginAdminFilter</filter-name>
<url-pattern>/admin/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
Si desea tener mas control sobre el proceso de autenticación, tambien puede utilizar directamente los métodos que ofrece la clase org.viafirma.cliente.ViafirmaClient. A continuación un ejemplo de uso del api cliente:
try {
if (!cliente.isResponseAuthentication(request)) {
// aún no hay datos, iniciamos la autenticación
cliente.autenticar(request, response);
} else {
// La autenticación ya se ha producido
// Recuperamos los datos recuperados del certificado del
// usuario.
Map<String, String> result = cliente.processResponseAuthentication(request, response);
// metemos el resultado en request para que pueda ser pintado en
// a siguiente página.
request.getSession().setAttribute("result", result);
response.sendRedirect(URI_OK);
}
} catch (InternalException e) {
// No se ha podido redireccionar al usuario para que realice la
// autenticación.
// redireccionamos a la página de error de autenticación.
request.getSession().setAttribute("error", e.getMessage());
request.getSession().setAttribute("codError", e.getCodigoError());
response.sendRedirect(URI_ERROR);
}
TODO
TODO