提交 c9195702 编写于 作者:  Peijun.zhao's avatar Peijun.zhao

兼容安卓加密接口报错,并记录流水

上级 c37dd5a6
流水线 #24666 已失败 于阶段
in 0 second
package com.pica.cloud.account.account.server.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.pica.cloud.account.account.server.configuration.PropertiesConfiguration;
import com.pica.cloud.account.account.server.constants.Constants;
import com.pica.cloud.account.account.server.entity.AccountUnionEntity;
import com.pica.cloud.account.account.server.entity.AesBean.AesAuthCodeReq;
import com.pica.cloud.account.account.server.entity.EncryptEntity;
import com.pica.cloud.account.account.server.entity.LogLoginAes;
import com.pica.cloud.account.account.server.enums.AccountExceptionEnum;
import com.pica.cloud.account.account.server.enums.AccountTypeEnum;
import com.pica.cloud.account.account.server.exception.AccountException;
import com.pica.cloud.account.account.server.req.BaseRequest;
import com.pica.cloud.account.account.server.service.AccountService;
import com.pica.cloud.account.account.server.service.AccountUnionService;
import com.pica.cloud.account.account.server.service.AuthCodeService;
import com.pica.cloud.account.account.server.service.CaptchaService;
import com.pica.cloud.account.account.server.service.*;
import com.pica.cloud.account.account.server.util.*;
import com.pica.cloud.foundation.entity.PicaException;
import com.pica.cloud.foundation.entity.PicaResponse;
import com.pica.cloud.foundation.entity.PicaResultCode;
import com.pica.cloud.foundation.entity.PicaWarnException;
import com.pica.cloud.foundation.redis.ICacheClient;
import com.pica.cloud.foundation.utils.utils.CommonUtil;
import com.pica.cloud.foundation.utils.utils.ValidateUtils;
......@@ -28,14 +26,10 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@Api(description = "短信验证码资源")
@RestController
public class AutoCodeController extends AccountBaseController {
......@@ -56,6 +50,9 @@ public class AutoCodeController extends AccountBaseController {
@Autowired
private AuthCodeService authCodeService;
@Autowired
private LoginService loginService;
@Autowired
private PropertiesConfiguration propertiesConfiguration;
......@@ -99,13 +96,36 @@ public class AutoCodeController extends AccountBaseController {
* @Date 2020/2/28 9:55
* @ModifyDate 2020/2/28 9:55
* @Params [entity, req]
* @Return com.pica.cloud.foundation.entity.PicaResponse
* @Return com.pica.cloud.foundation.entity.PicaResponse EncryptEntity
*/
@ApiOperation("获取短信验证码,无需图形验证码,如app端")
@PostMapping(value = "/authCode")
public PicaResponse getAuthCode(@RequestBody EncryptEntity entity, HttpServletRequest req) throws Exception {
public PicaResponse getAuthCode(@RequestBody AesAuthCodeReq authCodeReq, HttpServletRequest req) throws Exception {
// 验证码类型 0默认 1注册 2微信登录绑定手机 3修改手机
// 4重置密码 5忘记密码 7患者招募提交问卷(效验) 8Appe登录绑定手机
//added by joy begin
EncryptEntity entity = new EncryptEntity();
if(StringUtils.isEmpty(authCodeReq.getKey()) && StringUtils.isEmpty(authCodeReq.getContent())){
//明文时处理
entity = RSAUtil.getAuthCodeEncrypt(authCodeReq);
logger.info("AesAuthCodeReq getAuthCode:" + JSONObject.toJSONString(authCodeReq));
logger.info("AesAuthCodeReq getAuthCode encrypt:" + JSONObject.toJSONString(entity));
//个别报错数据记流水
LogLoginAes loginAes = new LogLoginAes();
loginAes.setChannel(1);
loginAes.setDeviceToken(authCodeReq.getDevice_token());
loginAes.setSourceType(null == super.getSourceType() ? 0 : super.getSourceType());
loginAes.setMobile(authCodeReq.getMobile());
loginAes.setDeviceInfo(super.getDeviceInfo("deviceinfo"));
loginService.insertLoginAesLog(loginAes);
}else {
//执行原逻辑
entity.setKey(authCodeReq.getKey());
entity.setContent(authCodeReq.getContent());
}
//added by joy end
BaseRequest request = CryptoUtil.decrypt(entity, BaseRequest.class);
request.setSourceType(super.getSourceType());
AccountUtils.checkMobilePhone(request.getMobile());
......
......@@ -28,8 +28,10 @@ public class CipherController {
@GetMapping(value = "/cipher/key")
public PicaResponse<String> getPublicKey() {
//提高qps 100 8失败率至 300 1 失败率
String key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnVzDlG6DJBwTsn7jFriKOmzqfm+d4vy6DtKqMfrEPg6hU3bfbR9XRfwqAFrS4+QowybpuyWCa7DFyKl0JyEa/GSrfjbXSpalFHhmWH0z0hCF1m/UvlPA0BaiYFy9ucXF9Uh8RaHkZGVmV+RbVISk4pjlZdRcK5EQ5hciBFGtgGwIDAQAB";
return PicaResponse.toResponse(rsaPublicKey);
String testPubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCa6j3SJwXr/pLLwb6Pq8pi9StPq+Wvm6vu+LWQB1hNqClWk0jQm5GnF6Kj0ac2gqgsMsutc3hhMaaX2QZvLX+gFQHC/ufGBdBbpPtDeGWsQItsMf/xqqlkLPkc7eVTyfsmrpQM7BG9LVvaPVXPVUcZfJNBaYuR4+Sf6Zi2ayI/hQIDAQAB";
String prodPubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnVzDlG6DJBwTsn7jFriKOmzqfm+d4vy6DtKqMfrEPg6hU3bfbR9XRfwqAFrS4+QowybpuyWCa7DFyKl0JyEa/GSrfjbXSpalFHhmWH0z0hCF1m/UvlPA0BaiYFy9ucXF9Uh8RaHkZGVmV+RbVISk4pjlZdRcK5EQ5hciBFGtgGwIDAQAB";
// return PicaResponse.toResponse(rsaPublicKey);
return PicaResponse.toResponse(rsaPublicKey); //
}
......
package com.pica.cloud.account.account.server.controller;
import com.alibaba.fastjson.JSONObject;
import com.pica.cloud.account.account.server.entity.*;
import com.pica.cloud.account.account.server.entity.AesBean.AesAuthCodeReq;
import com.pica.cloud.account.account.server.enums.AccountExceptionEnum;
import com.pica.cloud.account.account.server.enums.AccountTypeEnum;
import com.pica.cloud.account.account.server.enums.SourceTypeEnum;
......@@ -14,6 +16,7 @@ import com.pica.cloud.account.account.server.service.LoginService;
import com.pica.cloud.account.account.server.service.TokenService;
import com.pica.cloud.account.account.server.util.AccountUtils;
import com.pica.cloud.account.account.server.util.CryptoUtil;
import com.pica.cloud.account.account.server.util.RSAUtil;
import com.pica.cloud.foundation.entity.PicaResponse;
import com.pica.cloud.foundation.entity.PicaWarnException;
import com.pica.cloud.foundation.redis.CacheClient;
......@@ -219,7 +222,30 @@ public class LoginController extends AccountBaseController {
@ApiOperation(value = "统一校验(传空则不会校验)")
@PostMapping("/unifiedVerification")
public PicaResponse unifiedVerification(@RequestBody EncryptEntity entity) throws Exception{
public PicaResponse unifiedVerification(@RequestBody AesAuthCodeReq req) throws Exception{
//added by joy begin
EncryptEntity entity = new EncryptEntity();
if(StringUtils.isEmpty(req.getKey()) && StringUtils.isEmpty(req.getContent())){
//明文时处理
entity = RSAUtil.getAuthCodeEncrypt(req);
logger.info("AesAuthCodeReq unifiedVerification:" + JSONObject.toJSONString(req));
logger.info("AesAuthCodeReq unifiedVerification encrypt:" + JSONObject.toJSONString(entity));
//个别报错数据记流水
LogLoginAes loginAes = new LogLoginAes();
loginAes.setChannel(2);
loginAes.setDeviceToken(req.getDevice_token());
loginAes.setSourceType(null == super.getSourceType() ? 0 : super.getSourceType());
loginAes.setMobile(req.getMobile());
loginAes.setDeviceInfo(super.getDeviceInfo("deviceinfo"));
loginService.insertLoginAesLog(loginAes);
}else {
//执行原逻辑
entity.setKey(req.getKey());
entity.setContent(req.getContent());
}
//added by joy end
BaseRequest request = CryptoUtil.decrypt(entity, BaseRequest.class);
request.setSourceType(super.getSourceType());
loginService.preLoginValidate(request);
......@@ -251,7 +277,31 @@ public class LoginController extends AccountBaseController {
@ApiOperation(value = "app端手机号码一键登录")
@PostMapping("/login/one-click")
public PicaResponse<LoginResult> oneClickLogin(@RequestBody EncryptEntity entity) throws Exception {
public PicaResponse<LoginResult> oneClickLogin(@RequestBody AesAuthCodeReq aesReq) throws Exception {
//added by joy begin
EncryptEntity entity = new EncryptEntity();
if(StringUtils.isEmpty(aesReq.getKey()) && StringUtils.isEmpty(aesReq.getContent())){
//明文时处理
entity = RSAUtil.getOneClickEncrypt(aesReq);
logger.info("AesAuthCodeReq oneClickLogin:" + JSONObject.toJSONString(aesReq));
logger.info("AesAuthCodeReq oneClickLogin encrypt:" + JSONObject.toJSONString(entity));
//个别报错数据记流水
LogLoginAes loginAes = new LogLoginAes();
loginAes.setChannel(3);
loginAes.setDeviceToken(aesReq.getDevice_token());
loginAes.setSourceType(null == super.getSourceType() ? 0 : super.getSourceType());
loginAes.setOneToken(aesReq.getToken());
loginAes.setMobile(aesReq.getMobile());
loginAes.setDeviceInfo(super.getDeviceInfo("deviceinfo"));
loginService.insertLoginAesLog(loginAes);
}else {
//执行原逻辑
entity.setKey(aesReq.getKey());
entity.setContent(aesReq.getContent());
}
//added by joy end
OneClickLoginReq req = CryptoUtil.decrypt(entity, OneClickLoginReq.class);
req.setProductType(super.getProductType());
req.setSourceType(super.getSourceType());
......
// Copyright 2016-2101 Pica.
package com.pica.cloud.account.account.server.entity.AesBean;
/**
* @ClassName AesAuthCodeReq
* @Description TODO
* @Author peijun.zhao
* @Date 2020/4/21 18:33
* @ModifyDate 2020/4/21 18:33
* @Version 1.0
*/
public class AesAuthCodeReq {
private Integer bizType;
private String device_token;
private String mobile;
private Integer flag;
private String token;
/**
* 加密后的密文
*/
private String key;
/**
* 加密后的数据
*/
private String content;
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
public String getDevice_token() {
return device_token;
}
public void setDevice_token(String device_token) {
this.device_token = device_token;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public Integer getFlag() {
return flag;
}
public void setFlag(Integer flag) {
this.flag = flag;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
package com.pica.cloud.account.account.server.service;
import com.pica.cloud.account.account.server.entity.LogLoginAes;
import com.pica.cloud.account.account.server.entity.LoginResult;
import com.pica.cloud.account.account.server.entity.PICAPDoctor;
import com.pica.cloud.account.account.server.req.BaseRequest;
......@@ -91,4 +92,6 @@ public interface LoginService {
* @Return com.pica.cloud.account.account.server.entity.LoginResult
*/
LoginResult loginByAppleStep(BaseRequest request);
int insertLoginAesLog(LogLoginAes aes);
}
......@@ -91,6 +91,9 @@ public class LoginServiceImpl implements LoginService {
@Autowired
private OneClickProcessor oneClickProcessor;
@Autowired
private LogLoginAesMapper logLoginAesMapper;
@Value("${doubleWritingMode}")
private boolean doubleWritingMode;
......@@ -906,4 +909,23 @@ public class LoginServiceImpl implements LoginService {
accountUnionMapper.insertSelective(accountUnionEntity);
}
/**
* @Description TODO
* @Author peijun.zhao
* @Date 2020/4/22 17:14
* @ModifyDate 2020/4/22 17:14
* @Params [aes]
* @Return int
*/
@Override
public int insertLoginAesLog(LogLoginAes aes){
aes.setDeleteFlag(1);
aes.setCreateId(999999);
aes.setModifyId(999999);
aes.setCreateTime(new Date());
aes.setModifyTime(new Date());
return logLoginAesMapper.insert(aes);
}
}
package com.pica.cloud.account.account.server.util;
import com.alibaba.fastjson.JSONObject;
import com.pica.cloud.account.account.server.entity.AesBean.AesAuthCodeReq;
import com.pica.cloud.account.account.server.entity.EncryptEntity;
import com.pica.cloud.account.account.server.req.BaseRequest;
import com.pica.cloud.account.account.server.req.OneClickLoginReq;
import org.apache.tomcat.util.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
......@@ -36,6 +41,11 @@ public class RSAUtil {
public void init() {
RSAUtil.rsaprivatekey = rsaprivatekeyTemp;
RSAUtil.rsapublickey = rsapublickeyTemp;
// prd 配置
// RSAUtil.rsapublickey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnVzDlG6DJBwTsn7jFriKOmzqfm+d4vy6DtKqMfrEPg6hU3bfbR9XRfwqAFrS4+QowybpuyWCa7DFyKl0JyEa/GSrfjbXSpalFHhmWH0z0hCF1m/UvlPA0BaiYFy9ucXF9Uh8RaHkZGVmV+RbVISk4pjlZdRcK5EQ5hciBFGtgGwIDAQAB";
// RSAUtil.rsaprivatekey = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAKdXMOUboMkHBOyfuMWuIo6bOp+b53i/LoO0qox+sQ+DqFTdt9tH1dF/CoAWtLj5CjDJum7JYJrsMXIqXQnIRr8ZKt+NtdKlqUUeGZYfTPSEIXWb9S+U8DQFqJgXL25xcX1SHxFoeRkZWZX5FtUhKTimOVl1FwrkRDmFyIEUa2AbAgMBAAECgYEAlEZHxtoiL74OePRVrqNLb3zQBxkHkxAj0QPGktK3ZP3Nq9UB0kTmisi8rx5vZ+8TPoOgtAWvmdZrQbOT2NUjCUYKkGS+Wi1fXpP0Az2UJwDIQK4aQTZtNbM04f3Rmi5i24eASmSdl1svjHEv0YS6IC6sR1cbElZs94uDFshUeqECQQDTrmZda8fo6ZNsHVYWcjTwr8JKTIgjaD/hPi0JP6hhL0GVEAVwb2rsfJf5o2TR5RsNT8ANUYgFPRaAymLLe+5zAkEAymA9V55K6IJhnSp7HmWfGVmxvTrwZFJIzPv7DLi/RAS3yFPfTpyJGLirAnBQfKO/vwjxhAuwD21aDYHMTrj1uQJBAJdAikw+cz1tiLU70QOA32sLaxyDytLh7qMXNj7hiYLHrWjBZeGM+y23aTArHCMOPWIpleTuWO7FU4r7EdSr3RkCQQCliu4CwyhRY33H210U81memgFLYnAMEEce7qxgrqs+T4Gqa/lJy8BVqZGxkAA2xJfwA7fUJN9i7zdvvxJJ/wB5AkA+OKfnTXTp8qF4lZiVMrGl3d5sgg87q1DhC5XruviH6a3u6JOLlRNQy2+TGxzWMYaJ1RwEfygqBYOgyvoqNR3Q";
}
/**
......@@ -172,6 +182,60 @@ public class RSAUtil {
return new String(decryptedData);
}
// 获取验证码-加密
public static EncryptEntity getAuthCodeEncrypt(AesAuthCodeReq req){
BaseRequest authCode = new BaseRequest();
authCode.setFlag(req.getFlag() == null ? 0 : req.getFlag());
authCode.setMobile(req.getMobile());
authCode.setDevice_token(req.getDevice_token());
authCode.setBizType(req.getBizType());
String authCodeStr = JSONObject.toJSONString(authCode);
// System.out.println(authCodeStr);
String contentResult = null;
try {
contentResult = AESUtil.aesEncrypt(authCodeStr, "YCPQPx4qpQjEjDea");
} catch (Exception e) {
e.printStackTrace();
}
String keyResult = null;
try {
keyResult = RSAUtil.encrypt("YCPQPx4qpQjEjDea",rsapublickey);
} catch (Exception e) {
e.printStackTrace();
}
EncryptEntity encryptTest = new EncryptEntity();
encryptTest.setContent(contentResult);
encryptTest.setKey(keyResult);
return encryptTest;
// System.out.println(JSONObject.toJSONString(encryptTest2));
}
// oneclick-加密
public static EncryptEntity getOneClickEncrypt(AesAuthCodeReq req){
OneClickLoginReq oneReq = new OneClickLoginReq();
oneReq.setToken(req.getToken());
String authCodeStr = JSONObject.toJSONString(oneReq);
// System.out.println(authCodeStr);
String contentResult = null;
try {
contentResult = AESUtil.aesEncrypt(authCodeStr, "YCPQPx4qpQjEjDea");
} catch (Exception e) {
e.printStackTrace();
}
String keyResult = null;
try {
keyResult = RSAUtil.encrypt("YCPQPx4qpQjEjDea",rsapublickey);
} catch (Exception e) {
e.printStackTrace();
}
EncryptEntity encryptTest = new EncryptEntity();
encryptTest.setContent(contentResult);
encryptTest.setKey(keyResult);
return encryptTest;
}
public static void main(String[] args) throws Exception {
//生成公钥和私钥
// genKeyPair();
......@@ -187,12 +251,16 @@ public class RSAUtil {
// System.out.println("还原后的字符串为:" + messageDe);
genKeyPair();
String s = keyMap.get(0);
System.out.println(s);
String s1 = keyMap.get(1);
System.out.println(s1);
String publicKey = keyMap.get(0);
System.out.println(publicKey);
String privateKey = keyMap.get(1);
System.out.println(privateKey);
String messageEn = encrypt("{\"bizType\":1,\"device_token\":\"120c83f760bd0420c78\",\"mobile\":\"17868481983\",\"flag\":0}", publicKey);
System.out.println(messageEn);
String key1 = "";
String encryptMsg = "{\"key\":\"n2MyzrptkOsYE5c0lDn+5HU8x22DJTT49uad0+zeTt4Nj6RDrv3mJzKcc8LweYF5D7i4o812h9Gwn4drGJP+9Y8UOLNNRMx4+Au/V3TqOQFjve4jfUV8aewJK9Mildvsdk71ITe4YWd+8pQjuaQ4EkgAziFWEEuKiNnTEZjO8mE=\",\"content\":\"IRwE4SYrDk5RVpyycJy86n8Bu85FuQWt0Xb6wW+ITKObah0pkxKym+xwRwHMwMm5+UPmqNYhLsu5Dt39N14ZduwNDbktRaoAzvU6BHkdX4bWbkrPB7tw71J9k9zy7O/zaAzgo3SLUlj/xWB3KuOKcg==\"}";
System.out.println(decrypt(encryptMsg,privateKey));
String key2 = "";
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册