【问题标题】:Ant job adding escape character for String Password fieldAnt 作业为字符串密码字段添加转义字符
【发布时间】:2015-02-04 22:26:01
【问题描述】:

我有一个从 Jenkins 调用的 Ant 构建。 Jenkins 作业有参数,其中一个是密码字符串(Jenkins 中的“密码参数”)。

将密码写入属性文件的Ant目标指定为:

<target name="pwd-properties">
        <echo>Password is: ${password}</echo>   
       <propertyfile file="data.properties" comment="property file">
          <entry key="Pwd" value="${password}" />                 
       </propertyfile>
    </target>

密码是

我是密码!

但是,在构建机器中它显示为

我是密码\!

在属性文件中。然而,回声正确地显示了它。

有人能说出它是如何在密码字符串中获得额外的转义字符的吗?

【问题讨论】:

    标签: java ant jenkins build jenkins-plugins


    【解决方案1】:

    这与 Ant 无关 - 这只是 Properties.store 的记录行为:

    然后写出此属性表中的每个条目,每行一个。对于每个条目,写入键字符串,然后是 ASCII =,然后是关联的元素字符串。对于键,所有空格字符都写有前面的\ 字符。对于元素,前导空格字符(而不是嵌入或尾随空格字符)使用前面的\ 字符写入。键和元素字符 #!=: 前面带有反斜杠,以确保它们被正确加载。

    示例代码:

    import java.io.*;
    import java.util.*;
    
    public class Test {
        public static void main(String[] args) throws Exception {
            StringWriter writer = new StringWriter();
            Properties props = new Properties();
            props.setProperty("key", "value!");
            props.store(writer, "Demo");
            System.out.println(writer);
        }
    }
    

    输出:

    #Demo
    #Wed Feb 04 22:38:55 GMT 2015
    key=value\!
    

    换句话说,一切都很好。

    转义的原因是因为!用于cmets。来自Properties.load

    注释行有一个 ASCII '#' 或 '!'作为它的第一个非空白字符;注释行也被忽略并且不编码关键元素信息。

    现在它可以有条件地转义了——换句话说,只有当它可以作为注释字符时——但最简单的方法是一直转义它。

    【讨论】:

    • 谢谢乔恩!这是否意味着在读取值时会省略转义字符?也就是说,密码确实会读作“我是密码!”
    • @naspras:是的。这一切都是透明的——store() 会逃脱; load() 将逃脱。
    • 太棒了!感谢您的澄清。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 2015-12-06
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2019-01-19
    相关资源
    最近更新 更多