2014-03-25 130 views
1

我有一个带有WSSE身份验证的Web服务。 Web服务是用Symfony2编写的,我可以通过PHP客户端访问它,也可以通过名为REST Console的chrome插件访问它,因此它可以工作。为了手动生成头文件,我使用了this wsse generatorAndroid中的WSSE时间戳生成

为了使Android客户端,我遵循此tutorial,它的工作原理,但只有当它不生成时间戳。

其产生的时间戳的代码是:

private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); 
... 
private String generateTimestamp() { 
    sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
    return sdf.format(new Date()); 
} 

它返回它是正确的,格式和一切看起来很完美,但它告诉“未授权”的字符串,但是当我直接写戳它的工作原理像这样:

private String generateTimestamp() { 
    return "2014-03-25T09:00:26Z"; 
} 

我已经检查了编码,试图对其进行编码,如UTF-8和CP-1252(文件编码):

private String generateTimestamp() { 
    sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
    String hora = sdf.format(new Date()); 

    String correctString = "fail"; 
    try { 
     correctString = new String(hora.getBytes(), "UTF-8"); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } 
    correctString.hashCode(); 
    //String buena = "2014-03-25T08:10:59Z"; 
    return correctString ; 
} 

我使用Calendar.YEAR + Calendar.MONTH ....生成了时间戳,但仍然无效。

目前我正试图在真实手机上测试它,但我不认为这是一个模拟器问题。

你有什么建议吗?非常感谢您提前!

回答

0

,工程解决方案是:

private String generateTimestamp() { 
    sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
    String hora = sdf.format(new Date()); 

    return "\""+hora+"\""; 
} 

的问题是,最终的字符串,Android的发送到Web服务有两个双引号是这样的:

X-WSSE: UsernameToken Username="esther", PasswordDigest="FgWu9GAKkbmsc52fZHu3VINHlKw=", Nonce="OWVkNDMxMWY2OGE4MTZjOQ==", Created=""2014-03-25T09:00:26Z"" 

但它的工作原理,即使这不是最好的解决方案。

我认为这是间的Java /安卓/ SimpleDateFormat的是如何生成的字符串是不同的,但是......

我已经测试试图串联空字符串,但它仍然无法正常工作。