对接people工具类
This commit is contained in:
+190
@@ -0,0 +1,190 @@
|
||||
package com.jero.modules.system.util;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.security.InvalidKeyException;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.*;
|
||||
|
||||
|
||||
/**
|
||||
* @Author: liyawei
|
||||
* @Description: 签名工具类
|
||||
* @Date: Created in 14:49 2022/2/25
|
||||
*/
|
||||
public class HmacSignUtil {
|
||||
|
||||
//测试main方法
|
||||
public static void main(String[] args) throws MalformedURLException, NoSuchAlgorithmException, InvalidKeyException{
|
||||
String appSecret= "CDf2D9404C6ac1B0f7c3e3845ae0282a";
|
||||
String method ="GET";
|
||||
String path = "/people/v1/employee/detail";
|
||||
String queryStr = "app_id=100679&hash_type=sha256&domain_account=dujuan.cao";
|
||||
Map<String, String> header = new HashMap<>();
|
||||
|
||||
System.out.println(getSign(appSecret,method,path,queryStr,header));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取签名
|
||||
* @param appSecret
|
||||
* @param path
|
||||
* @param method
|
||||
* @param queryStr
|
||||
* @param header
|
||||
* @return
|
||||
* @throws NoSuchAlgorithmException
|
||||
* @throws InvalidKeyException
|
||||
* @throws MalformedURLException
|
||||
*/
|
||||
public static String getSign(String appSecret, String method, String path, String queryStr, Map<String, String> header) throws NoSuchAlgorithmException, InvalidKeyException, MalformedURLException {
|
||||
String signString = Splicing(method.toUpperCase()
|
||||
, path
|
||||
, getSortQuerysString(queryStr)
|
||||
, appSecret
|
||||
, getAccessToken(header));
|
||||
|
||||
System.out.println(signString);
|
||||
String sign = SHA(signString, "SHA-256");
|
||||
return sign;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取Header中Access Token参数(如果存在)
|
||||
* @param header
|
||||
* @return
|
||||
*/
|
||||
private static String getAccessToken(Map<String, String> header){
|
||||
//TODO
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 将参数排序后重新拼接
|
||||
* @param queryStr
|
||||
* @return 已排序和重新拼装的queryString
|
||||
*/
|
||||
private static String getSortQuerysString(String queryStr){
|
||||
if(queryStr == null || queryStr.equals("")){
|
||||
return "";
|
||||
}
|
||||
Map<String, String> querys = new HashMap<>();
|
||||
String[] arr = queryStr.split("&");
|
||||
for(String item : arr){
|
||||
if(item == null || item.equals("")){
|
||||
continue;
|
||||
}
|
||||
String[] kvs = item.split("=");
|
||||
if(kvs.length > 1){
|
||||
querys.put(kvs[0], kvs[1]);
|
||||
} else {
|
||||
querys.put(kvs[0], "");
|
||||
}
|
||||
}
|
||||
|
||||
StringBuilder content = new StringBuilder();
|
||||
List<String> keys = new ArrayList(querys.keySet());
|
||||
Collections.sort(keys);
|
||||
|
||||
for(int i = 0; i < keys.size(); ++i) {
|
||||
String key = keys.get(i);
|
||||
String value = String.valueOf(querys.get(key));
|
||||
content.append(i == 0 ? "" : "&").append(key).append("=");
|
||||
if(value != null && !value.equals("")){
|
||||
content.append(value);
|
||||
}
|
||||
}
|
||||
|
||||
return content.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取签名时间标签 获取精确到秒的时间戳
|
||||
* @return 签名时间标签字符串
|
||||
*/
|
||||
public static String getSecondTimestamp(Date date){
|
||||
if (null == date) {
|
||||
return null;
|
||||
}
|
||||
String timestamp = String.valueOf(date.getTime()/1000);
|
||||
System.out.println(date.getTime()/1000);
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
/**
|
||||
* 拼接字符串
|
||||
* @param method 方法
|
||||
* @param path
|
||||
* @param queryString 请求uri中的参数串
|
||||
* @param appSecert
|
||||
* @param accessToken 需要签名的请求头拼接
|
||||
* @return 待签名字符串
|
||||
*/
|
||||
private static String Splicing(String method, String path, String queryString, String appSecert, String accessToken){
|
||||
//签名⽤的字符串根据如下规则拼接⽽成
|
||||
// ${httpMethod}+${PATH}+'?'+'${key}=${value}&${key}=${value}&${key}=${value}'+${appSecret}+${access_token}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(method.toUpperCase());
|
||||
sb.append(path);
|
||||
sb.append("?");
|
||||
// 如果请求数据为url
|
||||
if (queryString == null){
|
||||
queryString = "";
|
||||
}
|
||||
sb.append(queryString);
|
||||
sb.append(appSecert);
|
||||
if (accessToken != null && !accessToken.equals("")){
|
||||
sb.append(accessToken);
|
||||
}
|
||||
// 拼接字符串
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 字符串 SHA 加密
|
||||
*
|
||||
* @param strText
|
||||
* @param strType
|
||||
* @return
|
||||
*/
|
||||
private static String SHA(String strText, String strType)
|
||||
{
|
||||
// 返回值
|
||||
String strResult = null;
|
||||
|
||||
// 是否是有效字符串
|
||||
if (strText != null && strText.length() > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
// SHA 加密开始
|
||||
// 创建加密对象 并传入加密类型
|
||||
MessageDigest messageDigest = MessageDigest.getInstance(strType);
|
||||
// 传入要加密的字符串
|
||||
messageDigest.update(strText.getBytes());
|
||||
// 得到 byte 类型结果
|
||||
byte byteBuffer[] = messageDigest.digest();
|
||||
|
||||
// 将 byte 转换为 string
|
||||
StringBuffer strHexString = new StringBuffer();
|
||||
// 遍历 byte buffer
|
||||
for (int i = 0; i < byteBuffer.length; i++)
|
||||
{
|
||||
String hex = Integer.toHexString(0xff & byteBuffer[i]);
|
||||
if (hex.length() == 1)
|
||||
{
|
||||
strHexString.append('0');
|
||||
}
|
||||
strHexString.append(hex);
|
||||
}
|
||||
// 得到返回結果
|
||||
strResult = strHexString.toString();
|
||||
}
|
||||
catch (NoSuchAlgorithmException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return strResult;
|
||||
}
|
||||
}
|
||||
+184
@@ -0,0 +1,184 @@
|
||||
package com.jero.modules.system.util;
|
||||
|
||||
import org.apache.http.Header;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.HttpStatus;
|
||||
import org.apache.http.client.config.RequestConfig;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.entity.StringEntity;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.security.InvalidKeyException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
/**
|
||||
* @Author: liyawei
|
||||
* @Description:
|
||||
* @Date: Created in 9:40 2022/2/24
|
||||
*/
|
||||
public class HttpRequestUtil {
|
||||
//main方法测试
|
||||
public static void main(String[] args) throws IOException, NoSuchAlgorithmException, InvalidKeyException {
|
||||
String appId = "100679";
|
||||
String appSecret = "CDf2D9404C6ac1B0f7c3e3845ae0282a";
|
||||
// 获取签名
|
||||
String method ="GET";
|
||||
String path = "/people/v1/employee/detail";
|
||||
String queryStr = "app_id=100679&hash_type=sha256&domain_account=dujuan.cao";
|
||||
Map<String, String> header = new HashMap<>();
|
||||
String timestamp = HmacSignUtil.getSecondTimestamp(new Date());
|
||||
queryStr += "×tamp=" + timestamp;
|
||||
String sign = HmacSignUtil.getSign(appSecret,method,path,queryStr,header);
|
||||
String url = "http://napoleon-fab-test.nioint.com";
|
||||
url += path + "?";
|
||||
url += queryStr;
|
||||
url += "&sign=" + sign;
|
||||
Map<String, String> headerMap = new HashMap<>();
|
||||
String response = getResponseOfGET(url, headerMap);
|
||||
|
||||
/* String url = "";
|
||||
Map<String, String> headerMap = HmacSignUtil.createSignHeader(appId, appSecret, url, "post");
|
||||
String body = JSONObject.toJSONString(null);
|
||||
String response = getResponseOfPOST(url, headerMap, body);*/
|
||||
System.out.println(response);
|
||||
}
|
||||
|
||||
public static String getResponseOfPOST(String url, Map<String, String> headerMap,String body) throws IOException {
|
||||
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
|
||||
CloseableHttpResponse httpResponse;
|
||||
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(20000000).setSocketTimeout(200000000).build();
|
||||
HttpPost httpPost = new HttpPost(url);
|
||||
httpPost.setConfig(requestConfig);
|
||||
httpPost.setEntity(new StringEntity(body));
|
||||
if (headerMap != null) {
|
||||
Iterator var38 = headerMap.entrySet().iterator();
|
||||
|
||||
while (var38.hasNext()) {
|
||||
Map.Entry<String, String> entry = (Map.Entry) var38.next();
|
||||
httpPost.addHeader(entry.getKey(), entry.getValue());
|
||||
}
|
||||
}
|
||||
// httpPost.addHeader("Content-Type", "application/json");
|
||||
|
||||
httpResponse = httpClient.execute(httpPost);
|
||||
// 校验是否正确
|
||||
final int statusCode = httpResponse.getStatusLine().getStatusCode();
|
||||
if (statusCode != HttpStatus.SC_OK) {
|
||||
System.out.println("Error authenticating to Force.com: " + statusCode);
|
||||
return null;
|
||||
}
|
||||
|
||||
String getResult = null;
|
||||
try {
|
||||
getResult = getStringFromResponseUzip(httpResponse);
|
||||
} catch (Exception ioException) {
|
||||
return null;
|
||||
// Handle system IO exception
|
||||
}
|
||||
System.out.println(getResult);
|
||||
return getResult;
|
||||
}
|
||||
|
||||
public static String getResponseOfGET(String url, Map<String, String> headerMap) throws IOException {
|
||||
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
|
||||
CloseableHttpResponse httpResponse;
|
||||
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(20000000).setSocketTimeout(200000000).build();
|
||||
HttpGet httpGet = new HttpGet(url);
|
||||
httpGet.setConfig(requestConfig);
|
||||
if (headerMap != null) {
|
||||
Iterator var38 = headerMap.entrySet().iterator();
|
||||
|
||||
while (var38.hasNext()) {
|
||||
Map.Entry<String, String> entry = (Map.Entry) var38.next();
|
||||
httpGet.addHeader(entry.getKey(), entry.getValue());
|
||||
}
|
||||
}
|
||||
// httpGet.addHeader("Content-Type", "application/json");
|
||||
|
||||
httpResponse = httpClient.execute(httpGet);
|
||||
// 校验是否正确
|
||||
final int statusCode = httpResponse.getStatusLine().getStatusCode();
|
||||
if (statusCode != HttpStatus.SC_OK) {
|
||||
System.out.println("Error authenticating to Force.com: " + statusCode);
|
||||
return null;
|
||||
}
|
||||
|
||||
String getResult = null;
|
||||
try {
|
||||
getResult = getStringFromResponseUzip(httpResponse);
|
||||
} catch (Exception ioException) {
|
||||
return null;
|
||||
// Handle system IO exception
|
||||
}
|
||||
System.out.println(getResult);
|
||||
return getResult;
|
||||
}
|
||||
/**
|
||||
* 对请求结果进行转码
|
||||
*
|
||||
* @param response
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public static String getStringFromResponseUzip(final HttpResponse response) throws IOException {
|
||||
if (response == null) {
|
||||
return null;
|
||||
}
|
||||
String responseText = "";
|
||||
//流不能关闭,关了就报错
|
||||
final InputStream in = response.getEntity().getContent();
|
||||
final Header[] headers = response.getHeaders("Content-Encoding");
|
||||
for (final Header h : headers) {
|
||||
System.out.println(h.getValue());
|
||||
if (h.getValue().indexOf("gzip") > -1) {
|
||||
//For GZip response
|
||||
try (final GZIPInputStream gzin = new GZIPInputStream(in);
|
||||
final InputStreamReader isr = new InputStreamReader(gzin, "UTF-8")) {
|
||||
responseText = getStringFromStream(isr);
|
||||
//responseText = URLDecoder.decode(responseText, "utf-8");
|
||||
} catch (final IOException exception) {
|
||||
exception.printStackTrace();
|
||||
}
|
||||
return responseText;
|
||||
}
|
||||
}
|
||||
|
||||
responseText = EntityUtils.toString(response.getEntity(), "utf-8");
|
||||
return responseText;
|
||||
}
|
||||
|
||||
/**
|
||||
* 文本转换
|
||||
*
|
||||
* @param isr
|
||||
* @return
|
||||
*/
|
||||
public static String getStringFromStream(final InputStreamReader isr) {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
try (BufferedReader br = new BufferedReader(isr)) {
|
||||
String tmp;
|
||||
while ((tmp = br.readLine()) != null) {
|
||||
sb.append(tmp);
|
||||
sb.append("\r\n");
|
||||
}
|
||||
} catch (IOException e) {
|
||||
//读取异常,返回null
|
||||
return null;
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user