1.实现方式
根据用户,密码,header等条件采用resful接口post方法请求获取token
2.代码
/** * 根据用户名密码获取OAuth Token * @return */ public static String getToken() { String json=""; String authorization =""; try { //url String url = "http://127.0.0.1:8080/oauth/token"; //data String username = "WTg8yJxyBiunnilJJzwFoyjH1tJE44qfHDD6zrSgaKLoZMYYubY0t8CUmfmmtbGEBjX6x0WVca60eNxSSMzSuLNzVkGUrlBHZuT2MvvgtY/T57qJNK4T9Ubi+irrBbcn0pHHSlHFrmn50DZlxqVSg83DX/UGf+lgbnWMUV9PiGE="; String password = "Lz7MOlyoimvaSB6aGfqQG954MO5oqi2bTVIJIGLL+FZEQeo/T1k23dqr+8Nrc9v+JsYCViRvMsyw40CbRJY14Q302VwsMreqxRWqqd5Y3f5rncoiAfWhu5XASa2Y6P3wmyUG3NG0frfw/173GT1cPBNBwZJiEtIYjHFS1saJ3tA="; NameValuePair[] data = { new NameValuePair("username", username), new NameValuePair("password", password) }; //header Map<String,String> header = new HashMap<String, String>(); header.put("Content_Type", "application/x-www-form-urlencoded"); header.put("Authorization", "Basic Q0xJRU5UOlNFQ1JFVA=="); json = sendTokenPost(url,data,header); JSONObject jsonObj = JSONObject.fromObject(json); String success = jsonObj.getString("success"); String accessToken = ""; String tokenType =""; String refreshToken =""; String expiresIn =""; String scope =""; if("true".equals(success)){ String entity = jsonObj.getString("entity"); JSONObject jsonObj2 = JSONObject.fromObject(entity); accessToken = jsonObj2.getString("access_token"); tokenType = jsonObj2.getString("token_type"); refreshToken = jsonObj2.getString("refresh_token"); expiresIn = jsonObj2.getString("expires_in"); scope = jsonObj2.getString("scope"); authorization = tokenType+" "+accessToken; }else{ String message = jsonObj.getString("message"); log.info("接口调用异常--->"+success+"["+message+"]"); } } catch (Exception e) { e.printStackTrace(); } //System.out.println(authorization); return authorization; }
/** * epc侧post请求获取token * @param url * @param data * @param header * @return */ public static String sendTokenPost(String url,NameValuePair[] data,Map<String,String> header) { HttpClient client = new HttpClient(); client.getHttpConnectionManager().getParams().setConnectionTimeout(30000); String result = ""; try { PostMethod method = new PostMethod(url); method.setRequestBody(data); Set<Entry<String, String>> headerSet = header.entrySet(); for (Entry<String, String> headerEntry : headerSet) { String key = headerEntry.getKey(); String value = headerEntry.getValue(); method.setRequestHeader(key, value); } if (null == url || !url.startsWith("http")) { throw new Exception("请求地址格式不对"); } int statusCode = 0; for (int i = 0; i < failCount; i++) {//失败后连续调用几次 try { statusCode = client.executeMethod(method); } catch (Exception e) { e.printStackTrace(); } System.out.println("sendTokenPost---statusCode---> "+statusCode); if (statusCode == HttpStatus.SC_OK) { // 打印服务器返回的状态 log.info("接口调用成功"); break; } else { log.error("接口调用失败:" + method.getStatusLine()); log.info(waitTime + "秒后将第" + (i + 1) + "次重新连接接口................."); Thread.sleep(waitTime);//接口调用失败后等待秒数 } } if (statusCode != HttpStatus.SC_OK) { throw new Exception("接口调用失败"); } // 返回响应消息 byte[] responseBody = method.getResponseBodyAsString().getBytes(method.getResponseCharSet()); // 在返回响应消息使用编码(utf-8或gb2312) result = new String(responseBody, "utf-8"); System.out.println("sendTokenPost---result---> " + result); // 释放连接 method.releaseConnection(); } catch (Exception e) { System. out.println( "发送 POST 请求出现异常!" + e); e.printStackTrace(); } return result; }