获取token改为全局变量

This commit is contained in:
邱贞招 2023-11-18 11:06:01 +08:00
parent 12a6d3ed5e
commit a37699ec1c
2 changed files with 56 additions and 39 deletions

View File

@ -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()
}
}

View File

@ -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.请求下发 */