2017-08-17 3 views
0

Je dois utiliser le service Web RESTful qui utilise l'authentification par jeton à partir de l'application Java. Je peux obtenir avec succès jeton de cette façon:Envoyer une requête GET avec un jeton en utilisant Java HttpUrlConnection

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 

public void getHttpCon() throws Exception{ 

String POST_PARAMS = "grant_type=password&username=someusrname&password=somepswd&scope=profile"; 
URL obj = new URL("http://someIP/oauth/token"); 
HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 
con.setRequestMethod("POST"); 
     con.setRequestProperty("Content-Type", "application/json;odata=verbose"); 
con.setRequestProperty("Authorization", 
     "Basic Base64_encoded_clientId:clientSecret"); 
con.setRequestProperty("Accept", 
     "application/x-www-form-urlencoded"); 

// For POST only - START 
con.setDoOutput(true); 
OutputStream os = con.getOutputStream(); 
os.write(POST_PARAMS.getBytes()); 
os.flush(); 
os.close(); 
// For POST only - END 

int responseCode = con.getResponseCode(); 
System.out.println("POST Response Code :: " + responseCode); 

if (responseCode == HttpURLConnection.HTTP_OK) { //success 
    BufferedReader in = new BufferedReader(new InputStreamReader(
      con.getInputStream())); 
    String inputLine; 
    StringBuffer response = new StringBuffer(); 

    while ((inputLine = in.readLine()) != null) { 
     response.append(inputLine); 
    } 
    in.close(); 

    // print result 
    System.out.println(response.toString()); 
} else { 
    System.out.println("POST request not worked"); 
} 
}  

Mais je ne peux pas trouver un moyen d'envoyer correctement ce jeton dans la requête get. Ce que j'essaie:

public StringBuffer getSmth(String urlGet, StringBuffer token) throws IOException{ 

    StringBuffer response = null; 
    URL obj = new URL(urlGet); 
    HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 
    con.setRequestMethod("GET"); 

    String authString = "Bearer " + Base64.getEncoder().withoutPadding().encodeToString(token.toString().getBytes("utf-8")); 
    con.setRequestProperty("Authorization", authString); 

    int responseCode = con.getResponseCode(); 
    System.out.println("GET Response Code :: " + responseCode); 
    if (responseCode == HttpURLConnection.HTTP_OK) { // success 
     BufferedReader in = new BufferedReader(new InputStreamReader(
       con.getInputStream())); 
     String inputLine; 
     response = new StringBuffer(); 

     while ((inputLine = in.readLine()) != null) { 
      response.append(inputLine); 
     } 
     in.close(); 

    } else { 
     System.out.println("GET request not worked"); 
    } 
    return response; 
} 

ne fonctionne pas. Toute aide pour résoudre ce problème sera très appréciée.

Répondre

0

Vous devez ajouter le jeton pour demander url:

String param = "?Authorization=" + token; 
URL obj = new URL(urlGet + param); 
HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 
conn.setRequestMethod("GET"); 

Comme alternative, utilisez restTemplate pour envoyer une demande get:

RestTemplate restTemplate = new RestTemplate(); 
HttpHeaders headers = new HttpHeaders(); 
headers.add("Authorization", "Basic " + token); 
HttpEntity<String> request = new HttpEntity<String>(headers); 
ResponseEntity<String> response = restTemplate.exchange(urlGet, HttpMethod.GET, request, String.class); 
0

Solved. Le serveur renvoie des chaînes supplémentaires en plus du jeton. Tout ce que je devais faire est d'extraire le jeton pur de la réponse reçue et de le coller sans aucun encodage: String authString = "Bearer" + pure_token;