es.mcu.yingo.filtros
Class FiltroArrobaFirma

java.lang.Object
  extended by org.springframework.web.filter.GenericFilterBean
      extended by org.springframework.web.filter.OncePerRequestFilter
          extended by es.mcu.yingo.filtros.FiltroAbstracto
              extended by es.mcu.yingo.filtros.FiltroArrobaFirma
All Implemented Interfaces:
javax.servlet.Filter, org.springframework.beans.factory.BeanNameAware, org.springframework.beans.factory.DisposableBean, org.springframework.beans.factory.InitializingBean, org.springframework.web.context.ServletContextAware

public class FiltroArrobaFirma
extends FiltroAbstracto

Comprueba el certificado del usuario contra aarrobafirma y crea el usuario según la factoria de usuarios configurada.
Obtiene el certificado del usurio o bien del valor almacenado en sesión con la clave claveSesionCertificado o bien de la configuración del Jboss/Apache.
Si el atributo errorSiNoExisteCertificado esta a '1' se mostrará y no existe usuario se provocará un error. Ejemplo configuración:

 
                FiltroArrobaFirmaRecursos
            es.mcu.yingo.filtros.FiltroArrobaFirma
                 
                        vistaError
                        /rcr/inter/error.form
                
                  
                        factoriaUsuariosCertSpringId
                        recursos.factoriaUsuariosInternet
                
        
 

Author:
miguel.esteban

Field Summary
private  java.lang.String claveSesionCertificado
          Si se definie será la clave de los objetos de sesión con la que se obtendrá en valor del certificado en base64
private  java.lang.String errorSiNoExisteCertificado
          Si tiene valor '1' se generará una excepción si no existe el certificado en sesión o no se puede obtener del entorno del Jboss/Apache.
private  java.lang.String factoriaUsuariosCertSpringId
          Id de bean en la configuración de spring de la factoría de usuarios con certificado
 
Fields inherited from class es.mcu.yingo.filtros.FiltroAbstracto
FILTRO_URL_VISTAERROR, logger, VISTA_ERROR, vistaError
 
Fields inherited from class org.springframework.web.filter.OncePerRequestFilter
ALREADY_FILTERED_SUFFIX
 
Constructor Summary
FiltroArrobaFirma()
           
 
Method Summary
protected  void doFilterInternal(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.FilterChain chain)
           
protected  void filtrar(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.FilterChain chain)
          Se obtienen los certificados del usuario y de la CA.
 java.lang.String getClaveSesionCertificado()
           
 java.lang.String getErrorSiNoExisteCertificado()
           
 java.lang.String getFactoriaUsuariosCertSpringId()
           
private  java.security.cert.X509Certificate obtenerCaApache(javax.servlet.http.HttpServletRequest request)
          Obtiene la Ca del apache con lo que nos devuelve en la propiedad SSL_CLIENT_CERT_CHAIN_0, Es importante que esta variable se exporte en la configuración del apache como JkEnvVar SSL_CLIENT_CERT_CHAIN_0
private  java.security.cert.X509Certificate[] obtenerCertificados(javax.servlet.http.HttpServletRequest request)
          Obtiene el array de certificados.
private  java.security.cert.X509Certificate[] obtenerCertificadosJbossApache(javax.servlet.http.HttpServletRequest request)
          Devuelve el array de objetos X509Certificate del JBOSS con el certificado del cliente en la primera posición y de la CA en la segunda si lo hubeira.
private  java.security.cert.X509Certificate[] obtenerCertificadosSesion(javax.servlet.http.HttpServletRequest request)
          Obtiene el certificado del valor que se ha almacenado en sesión con la clave claveSesionCertificado.
private  UsuarioConCertificado obtenerUsuario(java.security.cert.X509Certificate[] certificados)
          Obtiene el usuario de la factoria de usuarios definida como id de spring en el parámetro de inicio del filtro
 void setClaveSesionCertificado(java.lang.String claveSesionCertificado)
           
 void setErrorSiNoExisteCertificado(java.lang.String errorSiNoExisteCertificado)
           
 void setFactoriaUsuariosCertSpringId(java.lang.String factoriaUsuariosCertSpringId)
           
 
Methods inherited from class es.mcu.yingo.filtros.FiltroAbstracto
colocarParametroRequestVistaError, getVistaError, obtenerUrlActual, recogerError, setVistaError
 
Methods inherited from class org.springframework.web.filter.OncePerRequestFilter
doFilter, getAlreadyFilteredAttributeName, shouldNotFilter
 
Methods inherited from class org.springframework.web.filter.GenericFilterBean
addRequiredProperty, afterPropertiesSet, destroy, getFilterConfig, getFilterName, getServletContext, init, initBeanWrapper, initFilterBean, setBeanName, setFilterConfig, setServletContext
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

factoriaUsuariosCertSpringId

private java.lang.String factoriaUsuariosCertSpringId
Id de bean en la configuración de spring de la factoría de usuarios con certificado


claveSesionCertificado

private java.lang.String claveSesionCertificado
Si se definie será la clave de los objetos de sesión con la que se obtendrá en valor del certificado en base64


errorSiNoExisteCertificado

private java.lang.String errorSiNoExisteCertificado
Si tiene valor '1' se generará una excepción si no existe el certificado en sesión o no se puede obtener del entorno del Jboss/Apache.
Por defecto tiene valor '0';

Constructor Detail

FiltroArrobaFirma

public FiltroArrobaFirma()
Method Detail

doFilterInternal

protected void doFilterInternal(javax.servlet.http.HttpServletRequest request,
                                javax.servlet.http.HttpServletResponse response,
                                javax.servlet.FilterChain chain)
                         throws javax.servlet.ServletException,
                                java.io.IOException
Specified by:
doFilterInternal in class org.springframework.web.filter.OncePerRequestFilter
Throws:
javax.servlet.ServletException
java.io.IOException

filtrar

protected void filtrar(javax.servlet.http.HttpServletRequest request,
                       javax.servlet.http.HttpServletResponse response,
                       javax.servlet.FilterChain chain)
                throws java.lang.Exception
Se obtienen los certificados del usuario y de la CA. A partir de estos se obtiene el usuario a partir de la factoria de usuarios con certificado configurado en el filtro a partir del parámetro factoriaUsuariosCertSpringId

Parameters:
request -
response -
chain -
Throws:
java.lang.Exception

obtenerUsuario

private UsuarioConCertificado obtenerUsuario(java.security.cert.X509Certificate[] certificados)
                                      throws SeguridadYingoException
Obtiene el usuario de la factoria de usuarios definida como id de spring en el parámetro de inicio del filtro

Parameters:
x509Certificate -
Returns:
Throws:
SeguridadYingoException

obtenerCertificados

private java.security.cert.X509Certificate[] obtenerCertificados(javax.servlet.http.HttpServletRequest request)
                                                          throws java.security.cert.CertificateException,
                                                                 java.io.IOException,
                                                                 SeguridadYingoException
Obtiene el array de certificados. En la primera posición el certificado del usuario y en las segunda posición el certificado de la CA.
Primero intentará obtener el certificado de la sesión y si no lo obtiene lo obtendrá del entorno del Jboss/Apache.
Si errorSiNoExisteCertificado es igual a '1' se producirá un error si no se han encontrado certificados.

Parameters:
request -
Returns:
Throws:
java.security.cert.CertificateException
java.io.IOException
SeguridadYingoException

obtenerCertificadosJbossApache

private java.security.cert.X509Certificate[] obtenerCertificadosJbossApache(javax.servlet.http.HttpServletRequest request)
                                                                     throws java.security.cert.CertificateException
Devuelve el array de objetos X509Certificate del JBOSS con el certificado del cliente en la primera posición y de la CA en la segunda si lo hubeira. Si el jboss no devuelve el certificado de la CA en la segunda posición se obtiene de la variable exportada del apache. ver obtenerCaApache
Si no encuentra los certificado devuelve nulo.

Parameters:
request -
Returns:
Throws:
java.security.cert.CertificateException

obtenerCertificadosSesion

private java.security.cert.X509Certificate[] obtenerCertificadosSesion(javax.servlet.http.HttpServletRequest request)
                                                                throws java.security.cert.CertificateException,
                                                                       java.io.IOException
Obtiene el certificado del valor que se ha almacenado en sesión con la clave claveSesionCertificado.
Obtiene el valor que será el certificado codificado en base64. Este se convertira a un objeto X509Certificate y se almacenará en la primera posición del array resultado. La segunda posición, la del certificado de la CA será siempre nulo.
Simpre se borra de la sesión el atributo con la clave claveSesionCertificado.

Parameters:
request -
Returns:
Throws:
java.security.cert.CertificateException
java.io.IOException

obtenerCaApache

private java.security.cert.X509Certificate obtenerCaApache(javax.servlet.http.HttpServletRequest request)
                                                    throws java.security.cert.CertificateException
Obtiene la Ca del apache con lo que nos devuelve en la propiedad SSL_CLIENT_CERT_CHAIN_0, Es importante que esta variable se exporte en la configuración del apache como JkEnvVar SSL_CLIENT_CERT_CHAIN_0

Parameters:
request -
Returns:
Throws:
java.security.cert.CertificateException

getFactoriaUsuariosCertSpringId

public java.lang.String getFactoriaUsuariosCertSpringId()
Returns:
Devuelve el atributo factoriaUsuariosCertSpringId

setFactoriaUsuariosCertSpringId

public void setFactoriaUsuariosCertSpringId(java.lang.String factoriaUsuariosCertSpringId)
Parameters:
factoriaUsuariosCertSpringId - Carga el atributo factoriaUsuariosCertSpringId

getClaveSesionCertificado

public java.lang.String getClaveSesionCertificado()
Returns:
Devuelve el atributo claveSesionCertificado

setClaveSesionCertificado

public void setClaveSesionCertificado(java.lang.String claveSesionCertificado)
Parameters:
claveSesionCertificado - Carga el atributo claveSesionCertificado

getErrorSiNoExisteCertificado

public java.lang.String getErrorSiNoExisteCertificado()
Returns:
Devuelve el atributo errorSiNoExisteCertificado

setErrorSiNoExisteCertificado

public void setErrorSiNoExisteCertificado(java.lang.String errorSiNoExisteCertificado)
Parameters:
errorSiNoExisteCertificado - Carga el atributo errorSiNoExisteCertificado