2014-03-25 63 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的是如何生成的字符串是不同的,但是......

我已經測試試圖串聯空字符串,但它仍然無法正常工作。