java110-core/src/main/java/com/java110/core/factory/AuthenticationFactory.java
@@ -14,6 +14,8 @@ import com.java110.core.log.LoggerFactory; import com.java110.dto.reportData.ReportDataDto; import com.java110.dto.reportData.ReportDataHeaderDto; import com.java110.dto.system.AppRoute; import com.java110.utils.cache.AppRouteCache; import com.java110.utils.cache.CommonCache; import com.java110.utils.cache.JWTCache; import com.java110.utils.cache.MappingCache; @@ -22,9 +24,12 @@ import com.java110.utils.constant.ResponseConstant; import com.java110.utils.exception.NoAuthorityException; import com.java110.utils.util.Base64Convert; import com.java110.utils.util.ListUtil; import com.java110.utils.util.StringUtil; import org.apache.commons.codec.digest.DigestUtils; import org.slf4j.Logger; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; @@ -37,10 +42,7 @@ import java.security.*; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.Base64; import java.util.HashMap; import java.util.Map; import java.util.UUID; import java.util.*; /** * 鉴权工厂类 @@ -237,7 +239,7 @@ reqInfo += ((dataFlow.getReqBusiness() == null || dataFlow.getReqBusiness().size() == 0) ? dataFlow.getReqData() : dataFlow.getReqBusiness().toJSONString()); reqInfo += dataFlow.getAppRoutes().get(0).getSecurityCode(); logger.debug("加密字符串={}",reqInfo); logger.debug("加密字符串={}", reqInfo); return md5(reqInfo); } @@ -284,12 +286,93 @@ reqInfo += "GET".equals(dataFlow.getRequestHeaders().get(CommonConstant.HTTP_METHOD)) ? param : dataFlow.getReqData(); reqInfo += dataFlow.getAppRoutes().get(0).getSecurityCode(); logger.debug("加密字符串={}",reqInfo); logger.debug("加密字符串={}", reqInfo); return md5(reqInfo); } /** * 创建 签名 * @param headers * @param httpMethod * @param url * @param param */ public static void createSign(HttpHeaders headers, HttpMethod httpMethod, String url, String param) { String appId = headers.getFirst(CommonConstant.HTTP_APP_ID); if (StringUtil.isEmpty(appId)) { appId = headers.getFirst(CommonConstant.APP_ID); } String transactionId = headers.getFirst(CommonConstant.HTTP_TRANSACTION_ID); if (StringUtil.isEmpty(transactionId)) { transactionId = headers.getFirst(CommonConstant.TRANSACTION_ID); } String requestTime = headers.getFirst(CommonConstant.HTTP_REQ_TIME); if (StringUtil.isEmpty(transactionId)) { requestTime = headers.getFirst(CommonConstant.REQUEST_TIME); } List<AppRoute> appRoutes = AppRouteCache.getAppRoute(appId); if (ListUtil.isNull(appRoutes)) { return; } if (StringUtil.isEmpty(appRoutes.get(0).getSecurityCode())) { return; } String paramStr = ""; if (HttpMethod.GET == httpMethod) { paramStr = url.substring(url.indexOf("?")); } else { paramStr = param; } String sign = transactionId + requestTime + appId + paramStr + appRoutes.get(0).getSecurityCode(); headers.remove("sign"); headers.add("sign", md5(sign)); } /** * 创建 签名 * @param headers * @param httpMethod * @param url * @param param */ public static void createSign(Map<String, String> headers, HttpMethod httpMethod, String url, String param) { String appId = headers.get(CommonConstant.HTTP_APP_ID); if (StringUtil.isEmpty(appId)) { appId = headers.get(CommonConstant.APP_ID); } String transactionId = headers.get(CommonConstant.HTTP_TRANSACTION_ID); if (StringUtil.isEmpty(transactionId)) { transactionId = headers.get(CommonConstant.TRANSACTION_ID); } String requestTime = headers.get(CommonConstant.HTTP_REQ_TIME); if (StringUtil.isEmpty(transactionId)) { requestTime = headers.get(CommonConstant.REQUEST_TIME); } List<AppRoute> appRoutes = AppRouteCache.getAppRoute(appId); if (ListUtil.isNull(appRoutes)) { return; } if (StringUtil.isEmpty(appRoutes.get(0).getSecurityCode())) { return; } String paramStr = ""; if (HttpMethod.GET == httpMethod) { paramStr = url.substring(url.indexOf("?")); } else { paramStr = param; } String sign = transactionId + requestTime + appId + paramStr + appRoutes.get(0).getSecurityCode(); headers.put("sign", md5(sign)); } /** * md5加密 * * @param transactionId 流水 java110-core/src/main/java/com/java110/core/factory/CallApiServiceFactory.java
@@ -277,7 +277,8 @@ header.add(CommonConstant.USER_ID.toLowerCase(), StringUtil.isEmpty(pd.getUserId()) ? CommonConstant.ORDER_DEFAULT_USER_ID : pd.getUserId()); header.add(CommonConstant.HTTP_TRANSACTION_ID.toLowerCase(), StringUtil.isEmpty(pd.getTransactionId()) ? GenerateCodeFactory.getUUID() : pd.getTransactionId()); header.add(CommonConstant.HTTP_REQ_TIME.toLowerCase(), StringUtil.isEmpty(pd.getRequestTime()) ? DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_DEFAULT) : pd.getRequestTime()); header.add(CommonConstant.HTTP_SIGN.toLowerCase(), ""); //header.add(CommonConstant.HTTP_SIGN.toLowerCase(), ""); AuthenticationFactory.createSign(header,httpMethod,url,param); HttpEntity<String> httpEntity = new HttpEntity<String>(param, header); //logger.debug("请求中心服务信息,{}", httpEntity); service-acct/src/main/java/com/java110/acct/payment/business/payFee/PayFeePaymentBusiness.java
@@ -5,6 +5,7 @@ import com.java110.core.context.ICmdDataFlowContext; import com.java110.core.factory.CallApiServiceFactory; import com.java110.core.log.LoggerFactory; import com.java110.dto.app.AppDto; import com.java110.dto.fee.FeeDto; import com.java110.dto.payment.PaymentOrderDto; import com.java110.utils.cache.CommonCache; @@ -30,7 +31,7 @@ String appId = context.getReqHeaders().get("app-id"); String userId = context.getReqHeaders().get("user-id"); JSONObject orderInfo = CallApiServiceFactory.postForApi(appId, reqJson, "fee.payFeePre", JSONObject.class, userId); JSONObject orderInfo = CallApiServiceFactory.postForApi(AppDto.WEB_APP_ID, reqJson, "fee.payFeePre", JSONObject.class, userId); String orderId = orderInfo.getString("oId"); String feeName = orderInfo.getString("feeName"); double money = Double.parseDouble(orderInfo.getString("receivedAmount")); service-api/src/main/java/com/java110/api/smo/payment/impl/GoodsToNotifySMOImpl.java
@@ -1,6 +1,7 @@ package com.java110.api.smo.payment.impl; import com.alibaba.fastjson.JSONObject; import com.java110.core.factory.AuthenticationFactory; import com.java110.core.factory.WechatFactory; import com.java110.dto.wechat.SmallWeChatDto; import com.java110.api.properties.WechatAuthProperties; @@ -168,7 +169,9 @@ header.add(CommonConstant.HTTP_USER_ID.toLowerCase(), userId); header.add(CommonConstant.HTTP_TRANSACTION_ID.toLowerCase(), UUID.randomUUID().toString()); header.add(CommonConstant.HTTP_REQ_TIME.toLowerCase(), DateUtil.getDefaultFormateTimeString(new Date())); header.add(CommonConstant.HTTP_SIGN.toLowerCase(), ""); //header.add(CommonConstant.HTTP_SIGN.toLowerCase(), ""); AuthenticationFactory.createSign(header,httpMethod,url,param); header.add("content-type", "application/json"); HttpEntity<String> httpEntity = new HttpEntity<String>(param, header); //logger.debug("请求中心服务信息,{}", httpEntity); service-common/src/main/java/com/java110/common/thread/UpdateApplicationKeyPwd.java
@@ -1,6 +1,7 @@ package com.java110.common.thread; import com.alibaba.fastjson.JSONObject; import com.java110.core.factory.AuthenticationFactory; import com.java110.intf.common.IApplicationKeyInnerServiceSMO; import com.java110.dto.machine.ApplicationKeyDto; import com.java110.utils.constant.CommonConstant; @@ -95,7 +96,9 @@ header.add(CommonConstant.HTTP_USER_ID.toLowerCase(), CommonConstant.ORDER_DEFAULT_USER_ID); header.add(CommonConstant.HTTP_TRANSACTION_ID.toLowerCase(), UUID.randomUUID().toString()); header.add(CommonConstant.HTTP_REQ_TIME.toLowerCase(), DateUtil.getDefaultFormateTimeString(new Date())); header.add(CommonConstant.HTTP_SIGN.toLowerCase(), ""); //header.add(CommonConstant.HTTP_SIGN.toLowerCase(), ""); AuthenticationFactory.createSign(header,httpMethod,url,param); HttpEntity<String> httpEntity = new HttpEntity<String>(param, header); //logger.debug("请求中心服务信息,{}", httpEntity); try { springboot/src/main/java/com/java110/boot/smo/payment/impl/GoodsToNotifySMOImpl.java
@@ -4,6 +4,7 @@ import com.java110.boot.properties.WechatAuthProperties; import com.java110.boot.smo.AppAbstractComponentSMO; import com.java110.boot.smo.payment.IGoodsToNotifySMO; import com.java110.core.factory.AuthenticationFactory; import com.java110.core.factory.WechatFactory; import com.java110.core.log.LoggerFactory; import com.java110.dto.wechat.SmallWeChatDto; @@ -168,7 +169,9 @@ header.add(CommonConstant.HTTP_USER_ID.toLowerCase(), userId); header.add(CommonConstant.HTTP_TRANSACTION_ID.toLowerCase(), UUID.randomUUID().toString()); header.add(CommonConstant.HTTP_REQ_TIME.toLowerCase(), DateUtil.getDefaultFormateTimeString(new Date())); header.add(CommonConstant.HTTP_SIGN.toLowerCase(), ""); //header.add(CommonConstant.HTTP_SIGN.toLowerCase(), ""); AuthenticationFactory.createSign(header,httpMethod,url,param); header.add("content-type", "application/json"); HttpEntity<String> httpEntity = new HttpEntity<String>(param, header); //logger.debug("请求中心服务信息,{}", httpEntity);