JNLP属性中的百分比使System.getProperty返回null

时间:2013-11-20 09:06:23

标签: java xml special-characters java-web-start jnlp

使用jnlp将URL传递给应用程序时,如果该值包含百分比(%),则System.getProperty无法检索值。

返回null的示例:

<property name="jnlp.url" value="https://www.site.se/Register%20customer.aspx" />

返回正确url的示例:

<property name="jnlp.url" value="https://www.site.se/Register20customer.aspx" />

这是一个安全的东西,基于xml还是只是错误的编码?

我可以做一些逃避,或者我应该使用旧的switchheroo(% -> &#37; -> %或类似的)?

1 个答案:

答案 0 :(得分:1)

我使用Base64编码字符串的解决方法解决了这个问题。

基本上在生成jnlp文件(PHP)时:

<property name="<?=$key?>" value="<?=base64_encode($value)?>" />

然后在申请中:

import org.apache.commons.net.util.Base64;
...
jnlpURL  = deBase64(System.getProperty("jnlp.url"));
...
private String deBase64(String str)
{
    if (Base64.isArrayByteBase64(str.getBytes())) {
        return new String(Base64.decodeBase64(str));
    } else {
        return str;
    }
}

这并没有解决原始问题,为什么它返回null,但提供了一种绕过它的方法。