package com.platform.verification; import com.hx.util.DateUtil; import com.hx.util.StringUtils; import com.hx.util.rsa.RSAUtil; import com.platform.constants.LoginConstant; import com.platform.entity.ThirtApplication; import com.platform.resultTool.PlatformCode; import com.platform.resultTool.PlatformResult; import javax.servlet.http.HttpServletRequest; import java.text.SimpleDateFormat; import java.util.Date; /**平台校验方法 * @author CJH * @date 2021-10-20 */ public class VerificationTool { /**校验方法请求 * @param appId 用户的APPID ` * @param sign 用户签名 * @param thirtApplication ThirtApplication * @return */ public static PlatformResult verification(String appId, String sign, ThirtApplication thirtApplication,HttpServletRequest request){ if (StringUtils.isEmpty(sign)) { return PlatformResult.failure(PlatformCode.ERROR_SIGN, "签名错误01"); } if (StringUtils.isEmpty(appId)) { return PlatformResult.failure(PlatformCode.ERROR_APPIS, "APPID错误"); } //校验appid是否存在 if(thirtApplication == null){ return PlatformResult.failure(PlatformCode.ERROR_APPIS, "APPID无效"); } if(StringUtils.isEmpty(thirtApplication.getPrivateKey())){ return PlatformResult.failure(PlatformCode.ERROR_SIGN, "签名错误,APPID无效"); } //解密RSA String decrypt = null; try{ decrypt = RSAUtil.privateDecrypt(sign, thirtApplication.getPrivateKey()); }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"); } //接口有效5秒钟 if(System.currentTimeMillis()-date.getTime() > 10000){ return PlatformResult.failure(PlatformCode.ERRO_VISIT_OVERTIMR, "访问超时"); } thirtApplication.setPrivateKey(null); request.setAttribute(LoginConstant.LOGIN_APPLY,thirtApplication); 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); } }