Saltar al contenido

Spring, archivo de propiedades, valores vacíos

Ten en cuenta que en las ciencias informáticas un problema suele tener más de una soluciones, no obstante nosotros aquí enseñamos la mejor y más óptimo.

Solución:

Ok, creo que este es un error de seguridad de primavera.

Si depuro y observo la clase LdapServerBeanDefinition, hay un método llamado “parse”. Aquí hay un extracto:

public BeanDefinition parse(Element elt, ParserContext parserContext) 
    String url = elt.getAttribute(ATT_URL);

    RootBeanDefinition contextSource;

    if (!StringUtils.hasText(url)) 
        contextSource = createEmbeddedServer(elt, parserContext);
     else 
        contextSource = new RootBeanDefinition();
        contextSource.setBeanClassName(CONTEXT_SOURCE_CLASS);
        contextSource.getConstructorArgumentValues().addIndexedArgumentValue(0, url);
    

    contextSource.setSource(parserContext.extractSource(elt));

    String managerDn = elt.getAttribute(ATT_PRINCIPAL);
    String managerPassword = elt.getAttribute(ATT_PASSWORD);

    if (StringUtils.hasText(managerDn)) 
        if(!StringUtils.hasText(managerPassword)) 
            parserContext.getReaderContext().error("You must specify the " + ATT_PASSWORD +
                    " if you supply a " + managerDn, elt);
        

        contextSource.getPropertyValues().addPropertyValue("userDn", managerDn);
        contextSource.getPropertyValues().addPropertyValue("password", managerPassword);
    

    ...

Si depuro aquí, todas las variables (url, managerDn, managerPassword…) no se reemplazan por el valor especificado en el archivo de propiedades. Y así, url tiene el valor $ldap.server.url, managerDn tiene el valor $ldap.server.manager.dn y así sucesivamente.

El método parse crea un bean, una fuente de contexto que se usará más adelante. Y cuando se use este bean, se reemplazarán los marcadores de posición.

Aquí, tenemos el error. El método de análisis verifica si la URL está vacía o no. El problema es que la URL no está vacía aquí porque tiene el valor $ldap.server.url. Entonces, el método parse crea una fuente de contexto como un servidor distante.

Cuando se utilice la fuente creada, reemplazará $ldap.server.url por un valor vacío (como se especifica en el archivo de propiedades). Y……. ¡Bicho!

Realmente no sé cómo resolver esto por el momento, pero ahora entiendo por qué falla;)

valoraciones y comentarios

Si guardas alguna cuestión y disposición de reaccionar nuestro división puedes escribir una referencia y con mucho gusto lo observaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *