package cn.com.qmth.sdk.util; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; /** * 启明泰和-接口安全工具 * * @author WANGWEI * @date 2018年11月23日 * @Copyright (c) 2018-2020 WANGWEI [QQ:522080330] All Rights Reserved. */ public class QmthUtil { /** * 获取安全请求头信息 * * @author WANGWEI * @return */ public static Map getSecurityHeaders() { long timestamp = System.currentTimeMillis(); String rootOrgId = String.valueOf(getRootOrgId()); String appId = PropertiesUtil.getString("qmth.appId"); String secretKey = PropertiesUtil.getString("qmth.secretKey"); StringBuilder sb = new StringBuilder(); sb.append(rootOrgId).append(appId).append(timestamp).append(secretKey); byte[] bytes = SHA256.encode(sb.toString()); String accessToken = ByteUtil.toHexAscii(bytes); Map headers = new HashMap(); headers.put("rootOrgId", String.valueOf(rootOrgId)); headers.put("timestamp", String.valueOf(timestamp)); headers.put("appId", appId); headers.put("access_token", accessToken); return headers; } /** * 方法注释 * * @author WANGWEI * @return */ public static Long getRootOrgId() { Long rootOrgId = PropertiesUtil.getLong("qmth.rootOrgId", -1L); return rootOrgId; } /** * 方法注释 * * @author WANGWEI * @param args */ public static String buildCommonUserAccessUrl(String loginName) { String rootOrgId = String.valueOf(getRootOrgId()); long timestamp = System.currentTimeMillis(); String appId = PropertiesUtil.getString("qmth.appId"); String secretKey = PropertiesUtil.getString("qmth.secretKey"); String accessUrl = PropertiesUtil.getString("qmth.commonUserAccessUrl"); StringBuilder sb = new StringBuilder(); sb.append(loginName).append(rootOrgId).append(appId).append(timestamp).append(secretKey); byte[] bytes = SHA256.encode(sb.toString()); String accessToken = ByteUtil.toHexAscii(bytes); StringBuilder params = new StringBuilder(); params.append("loginName").append("=").append(urlEncode(loginName)); params.append("&").append("orgId").append("=").append(rootOrgId); params.append("&").append("appId").append("=").append(appId); params.append("&").append("timestamp").append("=").append(timestamp); params.append("&").append("token").append("=").append(accessToken); return accessUrl + "?" + params.toString(); } /** * 方法注释 * * @author WANGWEI * @param args */ public static String buildStudentAccessUrl(String accountType, String accountValue) { String rootOrgId = String.valueOf(getRootOrgId()); long timestamp = System.currentTimeMillis(); String appId = PropertiesUtil.getString("qmth.appId"); String secretKey = PropertiesUtil.getString("qmth.secretKey"); String accessUrl = PropertiesUtil.getString("qmth.studentAccessUrl"); StringBuilder sb = new StringBuilder(); sb.append(accountType).append(accountValue).append(rootOrgId).append(appId) .append(timestamp).append(secretKey); byte[] bytes = SHA256.encode(sb.toString()); String accessToken = ByteUtil.toHexAscii(bytes); StringBuilder params = new StringBuilder(); params.append("accountType").append("=").append(urlEncode(accountType)); params.append("&").append("accountValue").append("=").append(urlEncode(accountValue)); params.append("&").append("rootOrgId").append("=").append(rootOrgId); params.append("&").append("appId").append("=").append(appId); params.append("&").append("timestamp").append("=").append(timestamp); params.append("&").append("token").append("=").append(accessToken); return accessUrl + "?" + params.toString(); } /** * 方法注释 * * @author WANGWEI * @param s * @return */ private static String urlEncode(String s) { try { return URLEncoder.encode(s, "UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } /** * 构建URL * * @author WANGWEI * @param uri * @return */ public static String buildUrl(String uri) { String host = PropertiesUtil.getString("qmth.server.host"); String port = PropertiesUtil.getString("qmth.server.port"); StringBuilder sb = new StringBuilder(); sb.append("http://").append(host).append(":").append(port); if (!uri.startsWith("/")) { sb.append("/"); } sb.append(uri); return sb.toString(); } }