2017-08-17 59 views
0

我必须使用RESTful Web服务,它使用来自Java应用程序的基于令牌的身份验证。我可以通过这种方式成功获得令牌:使用Java发送带有令牌的GET请求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"); 
} 
}  

但是我找不到在获取请求中正确发送该令牌的方法。我在想什么:

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:

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

作为替代,使用restTemplate发送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

解决。服务器除了令牌外还返回一些额外的字符我所要做的就是从接收到的答案中提取纯的标记并粘贴它,而不进行任何编码:String authString =“Bearer”+ pure_token;

相关问题