package com.platform.verification;
|
|
|
import com.hx.util.DateUtil;
|
import com.hx.util.StringUtils;
|
import com.hx.util.rsa.RSAUtil;
|
import com.platform.resultTool.PlatformCode;
|
import com.platform.resultTool.PlatformResult;
|
|
import java.text.SimpleDateFormat;
|
import java.util.Date;
|
|
/**平台校验方法
|
* @author CJH
|
* @date 2021-10-20
|
*/
|
public class VerificationTool {
|
|
/**校验方法请求
|
* @param appId 用户的APPID
|
* @param sign 用户签名
|
* @param sys_appId 系统的appid
|
* @param sys_private_key 系统的RSA秘钥
|
* @return
|
*/
|
public static PlatformResult verification(String appId,String sign,String sys_appId,String sys_private_key){
|
|
if (StringUtils.isEmpty(sign)) {
|
return PlatformResult.failure(PlatformCode.ERROR_SIGN, "签名错误01");
|
}
|
if (StringUtils.isEmpty(appId)) {
|
return PlatformResult.failure(PlatformCode.ERROR_APPIS, "APPID错误01");
|
}
|
|
//校验appid是否存在
|
if(!sys_appId.equals(appId)){
|
return PlatformResult.failure(PlatformCode.ERROR_APPIS, "APPID错误02");
|
}
|
|
//解密RSA
|
String decrypt = null;
|
try{
|
decrypt = RSAUtil.privateDecrypt(sign, sys_private_key);
|
}catch (Exception e){
|
|
}
|
if(StringUtils.isEmpty(decrypt)){
|
return PlatformResult.failure(PlatformCode.ERROR_SIGN, "签名错误02");
|
}
|
|
//decrypt格式:appId_时间戳_随机数(尽量少)
|
String[] decrypts = decrypt.split("_");
|
if(decrypts.length != 3){
|
return PlatformResult.failure(PlatformCode.ERROR_SIGN, "签名错误03");
|
}
|
|
if (!appId.equals(decrypts[0])) {
|
return PlatformResult.failure(PlatformCode.ERROR_SIGN, "签名错误04");
|
}
|
|
Date date = null;
|
try{
|
//判断接口时间
|
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
String sd = sdf.format(new Date(Long.parseLong(String.valueOf(decrypts[1])))); // 时间戳转换成时间
|
date = DateUtil.parseString(sd,"yyyy-MM-dd HH:mm:ss");
|
}catch (Exception e){
|
return PlatformResult.failure(PlatformCode.ERROR_SIGN, "签名错误05");
|
}
|
|
//接口有效2秒钟
|
if(System.currentTimeMillis()-date.getTime() > 2000){
|
return PlatformResult.failure(PlatformCode.ERROR_INVALID_VISIT, "访问无效");
|
}
|
|
return PlatformResult.success();
|
}
|
|
public static void main(String[] args) {
|
|
Long timeStamp = System.currentTimeMillis(); //获取当前时间戳
|
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
String sd = sdf.format(new Date(Long.parseLong(String.valueOf(timeStamp))));
|
|
Date date = DateUtil.parseString(sd,"yyyy-MM-dd HH:mm:ss");
|
|
System.out.println();
|
|
// 时间戳转换成时间
|
System.out.println("格式化结果:" + sd);
|
|
}
|
|
}
|