2014-07-07 89 views
1

我想創建一個簡單的休息服務,使用spring mvc。除了一種方法,一切正常!JAVA:restfull web服務沒有正確傳遞參數

我想傳遞一個簽名(使用私鑰),在Base64中編碼(使用bouncy castle encoder)作爲參數,所以我可以在服務器端驗證它。問題是,簽名沒有正確地到達服務器!

我的服務器方法:

@RequestMapping("/indirectAcess") 
public @ResponseBody byte[] getResource(
     @RequestParam(value="id", required=true) String idString, 
     @RequestParam(value="url", required=true) String url, 
     @RequestParam(value="sig", required=true) byte[] sig){ 

    try{ 
     int id = Integer.parseInt(idString); 
     if(IndirectAccessValidate(id, url, sig)){ 
      return "HERE IS YOUR RESOURCE".getBytes(); 
     } 
     return null; 
    } catch(Exception e){ 
     return "ERROR".getBytes(); 
    } 

} 

我的客戶方法:

private static void indirectAccess(Scanner in){ 
    System.out.print("URL: "); 
    String url = in.nextLine(); 
    Teste finalUrl = client.generateIndirectAccess(url); 
    byte[] response = rest.getForObject(indirect, byte[].class, finalUrl.getId(), finalUrl.getUrl(), finalUrl.getSig()); 
    System.out.println(new String(response)); 
} 

我試着調試和服務器正確接收的ID和URL,但不簽名(其只是某種垃圾)。

任何人都可以幫我嗎?謝謝

+0

你試過用字符串而不是字節[]爲sig嗎? –

+0

我曾嘗試使用字符串,但沒有運氣......我也嘗試將一個字符串轉換爲字節數組,如 - 'finalUrl.getUrl()。getbytes()'但仍然,服務器沒有得到正確的 – Snox

回答

0

經過一段時間我解決了它!

我還是不知道爲什麼,但我不得不簽名通過爲Base64.encodeBase64URLSafeString(finalUrl.getSig()

和解碼,它作爲Base64.decodeBase64(sig)

服務器

@RequestMapping("/indirectAcess") 
    public @ResponseBody byte[] getResource(
      @RequestParam(value="id", required=true) String idString, 
      @RequestParam(value="url", required=true) String url, 
      @RequestParam(value="sig", required=true) String sig){ 

     try{ 
      int id = Integer.parseInt(idString); 
      if(IndirectAccessValidate(id, url, Base64.decodeBase64(sig))){ 
       return "HERE IS YOUR RESOURCE".getBytes(); 
      } 
      return null; 
     } catch(Exception e){ 
      return "ERROR".getBytes(); 
     } 

    } 

客戶

private static void indirectAccess(Scanner in){ 
    System.out.print("URL: "); 
    String url = in.nextLine(); 
    Teste finalUrl = client.generateIndirectAccess(url); 
    byte[] response = rest.getForObject(indirect, byte[].class, finalUrl.getId(), finalUrl.getUrl(), Base64.encodeBase64URLSafeString(finalUrl.getSig())); 
    System.out.println(new String(response)); 
} 

如果有人能解釋我爲什麼這麼做,我將不勝感激因爲我仍然可以找到一個理由...... 謝謝