2014-07-07 4 views
1

J'essaye de créer un service de repos simple, en utilisant le ressort mvc. Tout fonctionne bien, sauf pour une méthode! Je veux passer une signature (en utilisant une clé privée), encodée en Base64 (en utilisant l'encodeur de château gonflable) comme paramètre afin que je puisse le valider côté serveur. Le problème est, la signature ne parvient pas au serveur correctement!JAVA: service Web Restfull ne pas passer le paramètre correctement

Ma méthode serveur:

@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(); 
    } 

} 

Ma méthode client:

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)); 
} 

J'ai essayé de le déboguer et le serveur reçoit le signal correctement l'ID et l'URL, mais pas la signature (son juste une sorte de poubelle).

Quelqu'un peut-il m'aider s'il vous plaît? Merci

+0

Avez-vous essayé d'utiliser la chaîne au lieu de byte [] pour sig? –

+0

J'ai essayé d'utiliser une chaîne mais pas de chance ... j'ai aussi essayé de convertir une chaîne en un tableau d'octets comme - 'finalUrl.getUrl(). Getbytes()' mais le serveur ne l'obtenait pas correctement – Snox

Répondre

0

Après un moment je l'ai résolu!

Je ne sais toujours pas pourquoi mais je devais passer la signature comme Base64.encodeBase64URLSafeString(finalUrl.getSig()

et décode comme Base64.decodeBase64(sig)

serveur

@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(); 
     } 

    } 

client

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)); 
} 

J'apprécierais que quelqu'un puisse m'expliquer pourquoi s est arrivé, parce que je peux toujours trouver une raison pour ... Merci

Questions connexes