2017-08-17 27 views
0

Javaアプリケーションからのトークンベース認証を使用するRESTful Webサービスで作業する必要があります。Java HttpUrlConnectionを使用してトークンでGETリクエストを送信

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

しかし、getトークンで正しくトークンを送信する方法が見つかりません。私が試していること:

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

は動作しません。この問題を解決するための援助は高く評価されます。

答えて

0

URLを要求するためにトークンを追加する必要があります解決

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

:別の方法として

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

は、GETリクエストを送信するためにrestTemplateを使用しています。サーバーはトークンのほかに余分な文字列を返します。私がしなければならなかったのは、受け取った答えから純粋なトークンを抽出し、エンコーディングなしでそれを貼り付けることです:String authString = "Bearer" + pure_token;

関連する問題