获取token改为全局变量
This commit is contained in:
parent
12a6d3ed5e
commit
a37699ec1c
|
@ -2,6 +2,8 @@ package com.ruoyi.common.utils.onenet;
|
|||
|
||||
import com.ruoyi.common.constant.Constants;
|
||||
import com.ruoyi.common.utils.http.HttpUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.crypto.Mac;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
|
@ -10,30 +12,53 @@ import java.net.URLEncoder;
|
|||
import java.security.InvalidKeyException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Base64;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
|
||||
@Component
|
||||
public class Token {
|
||||
|
||||
// IP地址查询
|
||||
public static final String URL = "http://iot-api.heclouds.com/datapoint/history-datapoints";
|
||||
public static final String synccmdsUrl = "http://iot-api.heclouds.com/datapoint/synccmds?product_id=50dd83E8zQ&device_name=4827E2945C54&timeout=10";
|
||||
@Value(value = "${watering.version}")
|
||||
private static String version;
|
||||
|
||||
public static String assembleToken(String version, String resourceName, String expirationTime, String signatureMethod, String accessKey)
|
||||
throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
String res = URLEncoder.encode(resourceName, "UTF-8");
|
||||
String sig = URLEncoder.encode(generatorSignature(version, resourceName, expirationTime, accessKey, signatureMethod), "UTF-8");
|
||||
sb.append("version=")
|
||||
.append(version)
|
||||
.append("&res=")
|
||||
.append(res)
|
||||
.append("&et=")
|
||||
.append(expirationTime)
|
||||
.append("&method=")
|
||||
.append(signatureMethod)
|
||||
.append("&sign=")
|
||||
.append(sig);
|
||||
return sb.toString();
|
||||
@Value(value = "${watering.resourceName}")
|
||||
private static String resourceName;
|
||||
|
||||
@Value(value = "${watering.accessKey}")
|
||||
private static String accessKey;
|
||||
|
||||
|
||||
@Value(value = "${watering.daysToExpire}")
|
||||
private static Long daysToExpire;
|
||||
|
||||
private static String cachedToken;
|
||||
private static long tokenExpirationTime;
|
||||
|
||||
|
||||
public static String getToken()throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException {
|
||||
/** 判断token是否过期,如果不过期直接返回全局缓存token,如果过期重新获取token保存到全局缓存token中并更新过期时间*/
|
||||
if (isTokenExpired()) {
|
||||
long expirationTimeInSeconds = TimeUnit.DAYS.toSeconds(daysToExpire);
|
||||
String expirationTime = String.valueOf(System.currentTimeMillis() / 1000 + expirationTimeInSeconds);
|
||||
String signatureMethod = Token.SignatureMethod.SHA256.name().toLowerCase();//签名方式
|
||||
StringBuilder sb = new StringBuilder();
|
||||
String res = URLEncoder.encode(resourceName, "UTF-8");
|
||||
String sig = URLEncoder.encode(generatorSignature(version, resourceName, expirationTime, accessKey, signatureMethod), "UTF-8");
|
||||
sb.append("version=")
|
||||
.append(version)
|
||||
.append("&res=")
|
||||
.append(res)
|
||||
.append("&et=")
|
||||
.append(expirationTime)
|
||||
.append("&method=")
|
||||
.append(signatureMethod)
|
||||
.append("&sign=")
|
||||
.append(sig);
|
||||
cachedToken = sb.toString();
|
||||
// 更新 token 过期时间
|
||||
tokenExpirationTime = System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(expirationTimeInSeconds);
|
||||
return cachedToken;
|
||||
}
|
||||
return cachedToken;
|
||||
}
|
||||
|
||||
public static String generatorSignature(String version, String resourceName, String expirationTime, String accessKey, String signatureMethod)
|
||||
|
@ -67,21 +92,20 @@ public class Token {
|
|||
SHA1, MD5, SHA256;
|
||||
}
|
||||
|
||||
/**判断token是否过期*/
|
||||
private static boolean isTokenExpired() {
|
||||
return cachedToken == null || System.currentTimeMillis() > tokenExpirationTime;
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException {
|
||||
String version = "2020-05-29";//签名算法版本
|
||||
String resourceName = "userid/143831";//用户id
|
||||
String expirationTime = System.currentTimeMillis() / 1000 + 100 * 24 * 60 * 60 + "";//过期时间
|
||||
String signatureMethod = SignatureMethod.SHA256.name().toLowerCase();//签名方式
|
||||
String accessKey = "dJqF0qYhUbK/o1Pr9I5qxNoP14FlJLC+BFK2ZTjUX+lnKwoNYvBYsM/7Xu1ERIzSkUoxVkP/N1RMvGlBKMoBtA==";
|
||||
String token = assembleToken(version, resourceName, expirationTime, signatureMethod, accessKey);
|
||||
String token = getToken();
|
||||
System.out.println("Authorization:" + token);
|
||||
|
||||
String rspStr = HttpUtils.sendGet(URL, token, Constants.UTF8);
|
||||
HttpUtils.sendPostWithToken(synccmdsUrl,"",token);
|
||||
|
||||
String iotUrl = "https://iot-api.heclouds.com/datapoint";
|
||||
|
||||
String rspStr = HttpUtils.sendGet(iotUrl, token, Constants.UTF8);
|
||||
HttpUtils.sendPostWithToken(iotUrl,"open",token);
|
||||
// HttpUtils.sendGet()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -23,7 +23,6 @@ import org.springframework.stereotype.Service;
|
|||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static com.ruoyi.common.utils.SecurityUtils.getUsername;
|
||||
|
||||
|
@ -147,10 +146,7 @@ public class AsDeviceServiceImpl extends ServiceImpl<AsDeviceMapper, AsDevice> i
|
|||
String param = "device_name=" + deviceName + "&product_id=" + productId +"&timeout=" + timeout;
|
||||
String sendUrl = iotUrl+ IotConstants.ADDS_COMMAND + "?"+param;
|
||||
|
||||
long expirationTimeInSeconds = TimeUnit.DAYS.toSeconds(daysToExpire);
|
||||
String expirationTime = String.valueOf(System.currentTimeMillis() / 1000 + expirationTimeInSeconds);
|
||||
String signatureMethod = Token.SignatureMethod.SHA256.name().toLowerCase();//签名方式
|
||||
String token = Token.assembleToken(version, resourceName, expirationTime, signatureMethod, accessKey);
|
||||
String token = Token.getToken();
|
||||
logger.info("IOT获取到Authorization:【{}】",token);
|
||||
|
||||
String result = HttpUtils.sendPostWithToken(sendUrl, command, token);
|
||||
|
@ -250,10 +246,7 @@ public class AsDeviceServiceImpl extends ServiceImpl<AsDeviceMapper, AsDevice> i
|
|||
logger.info("IOT请求地址:【{}】", sendUrl);
|
||||
|
||||
/** 2.获取token */
|
||||
long expirationTimeInSeconds = TimeUnit.DAYS.toSeconds(daysToExpire);
|
||||
String expirationTime = String.valueOf(System.currentTimeMillis() / 1000 + expirationTimeInSeconds);
|
||||
String signatureMethod = Token.SignatureMethod.SHA256.name().toLowerCase();//签名方式
|
||||
String token = Token.assembleToken(version, resourceName, expirationTime, signatureMethod, accessKey);
|
||||
String token = Token.getToken();
|
||||
logger.info("IOT获取到Authorization:【{}】",token);
|
||||
|
||||
/** 3.请求下发 */
|
||||
|
|
Loading…
Reference in New Issue
Block a user