Java tutorial
/* Copyright (C) 2007 Flix Garca Borrego (borrego at gmail.com) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ package org.viafirma.cliente.util; import java.util.Properties; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NameClassPair; import javax.naming.NamingEnumeration; import javax.servlet.FilterConfig; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.viafirma.cliente.ViafirmaClientFactory; /** * Mtodos de utilidad para recuperar los parametros de configuracin de la aplicacin. * * @author Felix Garcia Borrego (borrego at gmail.com) */ public class ConfigUtil { private static ConfigUtil singleton; public static ConfigUtil getInstance() { if (singleton == null) { singleton = new ConfigUtil(); } return singleton; } /** * Indica si el cliente ya ha sido inicializado. */ private boolean isInit; /** * Url a la que se redirecciona en caso de error.. */ private String uriError; /** * Recupera el conjunto de propiedades que utiliza la aplicacin. * @param context * @return */ public Properties readConfigPropertes() { Properties properties = new Properties(); Context initCtx; try { // carcamos la configuracin por defecto properties.load(getClass().getResourceAsStream("/viafirmaConfig.properties")); // recuperamos la configuracin almacenada en el contexto de aplicacin initCtx = new InitialContext(); Context contextInit = (Context) initCtx.lookup("java:comp/env"); // recuperamos ahora todos los parametros JNDI que estan en el raiz de la aplicacin NamingEnumeration<NameClassPair> propiedadesJDNI = contextInit.list(""); while (propiedadesJDNI.hasMoreElements()) { NameClassPair propiedad = propiedadesJDNI.nextElement(); Object temp = contextInit.lookup(propiedad.getName()); if (temp instanceof String) { if (propiedad.getName().startsWith("SYSTEM_")) { String valor = (String) temp; String nombre = StringUtils.substringAfter(propiedad.getName(), "SYSTEM_"); System.getProperties().put(nombre, valor); properties.put(nombre, valor); } else { String valor = (String) temp; properties.put(propiedad.getName(), valor); } } } for (Object key : properties.keySet()) { if (((String) key).contains("PASSWORD")) { System.out.println("\t\t\t" + key + "=***"); } else { System.out.println("\t\t\t" + key + "=" + properties.get(key)); } } } catch (Exception e) { log.error("No se pueden recuperar los parametros de configuracin. JNDI parece no estar disponible. " + e.getMessage()); //Permitimos el arranque de la aplicacin utilizando la configuracin de los properties. //throw new ExceptionInInitializerError("No se pueden recuperar los parametros de configuracin. JNDI parece no estar disponible."+e.getMessage()); } return properties; } /** * Inicializa el filtro. * Configura el cliente Viafirma. */ public void init(FilterConfig config) { if (!isInit) { isInit = true; // recuperamos la configuracin del contexto /* * <!-- Configuracin del cliente de ejemplo integrado en la plataforma --> <Environment description="Configuracin del Cliente:Proveedor OpenID utilizado para la autenticacin" name="URL_DEFAULT_AUTHENTICATION_PROVIDER" value="http://localhost:8080/viafirma/pip/#ID#" type="java.lang.String" override="false"/> <Environment description="Configuracin del Cliente:Proveedor OpenID utilizado para la firma de documentos" name="URL_DEFAULT_SIGN_PROVIDER" value="http://localhost:8080/viafirma/sign/#ID#" type="java.lang.String" override="false"/> <Environment description="Configuracin del Cliente: Url de retorno de los datos usdado por el cliente. Es la url que informa el cliente al servidor para que este le retorne aqui el resultado" name="URL_AUTHENTICATION_RETURN_OPEN_ID" value="http://localhost:8080/viafirma/testAuthentication" type="java.lang.String" override="false"/> <Environment description="Configuracin del Cliente: Url de retorno del resultado de la firma usdado por el cliente. Es la url que informa el cliente al servidor para que este le retorne aqui el resultado" name="URL_FIRMA_RETURN_OPEN_ID" value="http://localhost:8080/viafirma/testFirma" type="java.lang.String" override="false"/> * */ // recuperamos la url en la que se encuentra el proveedor de Viafirma que se desea utilizar Properties properties = ConfigUtil.getInstance().readConfigPropertes(); // las propiedades que esperamos recuperar son: url_proveedor String urlProveedor = properties.getProperty(Constantes.PARAM_URL_PROVIDER_VIAFIRMA); if (urlProveedor == null) { log.error("Falta el prarametro de configuracin : " + Constantes.PARAM_URL_PROVIDER_VIAFIRMA + ", se intentaran recuperar los parametros de configuracin de forma independiente"); throw new ExceptionInInitializerError("Parametro '" + Constantes.PARAM_URL_PROVIDER_VIAFIRMA + "' requerido para inicializar el cliente Viafirma."); } else { // Utilizando el proveedor contruimos las urls de configuracin que necesitamos. properties.setProperty(Constantes.PARAM_URL_DEFAULT_AUTHENTICATION_PROVIDER, urlProveedor + "/pip/#ID#"); properties.setProperty(Constantes.PARAM_URL_DEFAULT_SIGN_PROVIDER, urlProveedor + "/sign/#ID#"); properties.setProperty(Constantes.PARAM_URL_DEFAULT_SIGN_PROVIDER, urlProveedor + "/sign/#ID#"); } // recupero la url de retorno en caso de error. uriError = config.getInitParameter(Constantes.PARAM_URI_ERROR); // Inicializamos el cliente Viafirma ViafirmaClientFactory.init(properties); } } /** * @return Returns the uriError. */ public String getUriError() { return uriError; } private Log log = LogFactory.getLog(ConfigUtil.class); }