提交 99fd1988 编写于 作者: rushui.chen's avatar rushui.chen

20190827 注册接口定义

上级 d48b4134
流水线 #13704 已失败 于阶段
in 0 second
......@@ -17,10 +17,12 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.*;
/**
* controller基类
*
* @author andong
* @create 2019/5/21
*/
......@@ -76,7 +78,7 @@ public abstract class AccountBaseController extends BaseController {
try {
Map<String, String> data = Object2Map.objectToMapString("yyyy-MM-dd HH:mm:ss", picaUser, new String[0]);
data.put("sysCode", sysCode);
return super.getRedisClient().saveToken(data, 365*24*3600); //token有效期365天
return super.getRedisClient().saveToken(data, 365 * 24 * 3600); //token有效期365天
} catch (Exception ex) {
logger.error("保存token失败,doctorId: {}", picaUser.getId());
return StringUtils.EMPTY;
......@@ -125,4 +127,13 @@ public abstract class AccountBaseController extends BaseController {
logger.error("发送短信失败");
}
}
public int getProductType() {
return 0;
}
public int getSourceType() {
return 0;
}
}
package com.pica.cloud.account.account.server.controller;
import com.pica.cloud.account.account.server.entity.EncryptEntity;
import com.pica.cloud.account.account.server.enums.EnumsType;
import com.pica.cloud.account.account.server.req.BaseRequest;
import com.pica.cloud.account.account.server.service.RegisterService;
import com.pica.cloud.account.account.server.util.AccountUtils;
import com.pica.cloud.account.account.server.util.CryptoUtil;
import com.pica.cloud.foundation.entity.PicaResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api("注册资源")
@RestController
public class RegisterController {
@RequestMapping("/register")
public class RegisterController extends AccountBaseController {
@Autowired
private RegisterService registerService;
@ApiOperation("注册接口")
@PostMapping(value = "")
public PicaResponse<String> register(@RequestBody EncryptEntity entity) throws Exception {
BaseRequest request = CryptoUtil.decrypt(entity);
AccountUtils.checkMobilePhone(request.getMobile());
AccountUtils.getAuthCodeKey(request.getSysCode(), EnumsType.SYSCODE_TYPE_REGISTER.getCode() + "");
request.setFlag(EnumsType.SYSCODE_TYPE_REGISTER.getCode());
request.setProductType(super.getProductType());
request.setSourceType(super.getSourceType());
PicaResponse picaResponse = registerService.register(request);
return picaResponse;
}
}
package com.pica.cloud.account.account.server.entity;
/**
* 加解密数据模型
*/
public class EncryptEntity {
/**
* 加密后的密文
*/
private String key;
/**
* 加密后的数据
*/
private String content;
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;
}
@Override
public String toString() {
return "EncryptEntity{" +
"key='" + key + '\'' +
", content='" + content + '\'' +
'}';
}
}
package com.pica.cloud.account.account.server.req;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ApiModel
public class BaseRequest {
private String mobile;
private String sysCode;
private int flag;
@ApiModelProperty("产品线类型")
private int productType;
@ApiModelProperty("渠道来源")
private int sourceType;
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getSysCode() {
return sysCode;
}
public void setSysCode(String sysCode) {
this.sysCode = sysCode;
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
public int getProductType() {
return productType;
}
public void setProductType(int productType) {
this.productType = productType;
}
public int getSourceType() {
return sourceType;
}
public void setSourceType(int sourceType) {
this.sourceType = sourceType;
}
}
package com.pica.cloud.account.account.server.service;
import com.pica.cloud.account.account.server.req.BaseRequest;
import com.pica.cloud.foundation.entity.PicaResponse;
public interface RegisterService {
PicaResponse register(BaseRequest baseRequest);
}
package com.pica.cloud.account.account.server.service;
import com.pica.cloud.account.account.server.req.BaseRequest;
import com.pica.cloud.foundation.entity.PicaResponse;
import org.springframework.stereotype.Service;
@Service
public class RegisterServiceImpl implements RegisterService {
@Override
public PicaResponse register(BaseRequest baseRequest) {
return null;
}
}
package com.pica.cloud.account.account.server.util;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
/**
* AES加解密工具类
*/
public class AESUtil {
/**
* 指定加密算法为AES
*/
private static final String ALGORITHM = "AES";
/**
* UUID随机密钥:必须长度为16
*
* @return
*/
public static String generateKeyString() {
//return UUID.randomUUID().toString().replaceAll("-", "").substring(0, 16);
return "276e35e6f91d4ec1";
}
/**
* 根据密钥和算法生成Key
*
* @return
* @throws Exception
*/
private static Key generateKey(String keyString) throws Exception {
Key key = new SecretKeySpec(keyString.getBytes(), ALGORITHM);
return key;
}
/**
* 用来进行加密的操作
*
* @param data
* @return
* @throws Exception
*/
public static String encrypt(String keyString, String data)
throws Exception {
Key key = generateKey(keyString);
Cipher c = Cipher.getInstance(ALGORITHM);
c.init(Cipher.ENCRYPT_MODE, key);
byte[] encVal = c.doFinal(data.getBytes());
String encryptedValue = new BASE64Encoder().encode(encVal);
return encryptedValue;
}
/**
* 用来进行解密的操作
*
* @param encryptedData
* @return
* @throws Exception
*/
public static String decrypt(String keyString, String encryptedData) throws Exception {
Key key = generateKey(keyString);
Cipher c = Cipher.getInstance(ALGORITHM);
c.init(Cipher.DECRYPT_MODE, key);
byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedData);
byte[] decValue = c.doFinal(decordedValue);
String decryptedValue = new String(decValue);
return decryptedValue;
}
public static void main(String[] args) throws Exception {
System.out.println(generateKeyString());
String keyString = generateKeyString();
//String keyString = "1234567890123456";
System.out.println("密钥:" + keyString);
String source = "恭喜发财!";// 要加密的字符串
System.out.println("准备用密钥加密的字符串为:" + source);
String cryptograph = encrypt(keyString, source);// 生成的密文
System.out.print("用密钥加密后的结果为:" + cryptograph);
System.out.println();
String target = decrypt(keyString, cryptograph);// 解密密文
System.out.println("用密钥解密后的字符串为:" + target);
System.out.println();
}
}
package com.pica.cloud.account.account.server.util;
import com.alibaba.fastjson.JSONObject;
import com.pica.cloud.account.account.server.entity.EncryptEntity;
import com.pica.cloud.account.account.server.req.BaseRequest;
/**
* 加解密工具类
*/
public class CryptoUtil {
/**
* 加密数据
*
* @param data
* @return
* @throws Exception
*/
public static EncryptEntity encrypt(String data) throws Exception {
//1、产生AES密钥
String keyString = AESUtil.generateKeyString();
//2、用AES法加密数据
String content = AESUtil.encrypt(keyString, data);
//3、用RSA加密AES密钥
String finalKey = RSAUtil.encrypt(keyString);
EncryptEntity encryptEntity = new EncryptEntity();
encryptEntity.setContent(content);
encryptEntity.setKey(finalKey);
return encryptEntity;
}
/**
* 解密数据
*
* @param key
* @param data
* @return
*/
public static String decrypt(String key, String data) throws Exception {
//获取解密密钥
String decryptKey = RSAUtil.decrypt(key);
//解密数据
String content = AESUtil.decrypt(decryptKey, data);
return content;
}
/**
* 解密数据
*
* @param encryptEntity
* @return
* @throws Exception
*/
public static BaseRequest decrypt(EncryptEntity encryptEntity) throws Exception {
//获取解密密钥
String decryptKey = RSAUtil.decrypt(encryptEntity.getKey());
//解密数据
String content = AESUtil.decrypt(decryptKey, encryptEntity.getContent());
//反序列化成对象
BaseRequest request = (BaseRequest) JSONObject.toJSON(content);
return request;
}
}
package com.pica.cloud.account.account.server.util;
import org.apache.tomcat.util.codec.binary.Base64;
import javax.crypto.Cipher;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;
/**
* RSA加解密工具类
*/
public class RSAUtil {
//用于封装随机产生的公钥与私钥
private static Map<Integer, String> keyMap = new HashMap<>();
private static final String privateKey="MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAO+zh8bnUA+elnRy1BHKEGrbTmh/" +
"r71zFboVTznwAuEzPnvOezQBOY+623mIXh86/cyCLlCRzbGm0Q5M3LSY6sTemNXtupVnb1lWwD1xDrSG0JsCgeS/weCLI9gHaknNuMfVlg+" +
"5esYcy2JlyG5ldcJahCgAOog2lJr4pLUSj8fJAgMBAAECgYEAiJIlnjJU71FQL/Ds22XhjMB/IBMAMlTL4EYb6crSGTV1OF0g3TSFc1rniY" +
"sk9W5LBKZ3dPhd1gZRvnAUn+EwgPh1bVBG0Z30vr2Ea0w9v+D3T96byeCKh+xoKQqG+Yp+u5w8v6MNNX6sVN2D0gks9YgY+2xGEeAf9kuF5" +
"gpHhAECQQD65WyV3dI8uO4tQEBnS6LRAWVFuEZEWp1W8MXm5DUz/Tnsd7eAdg3VRdS1rZJ17pLa9umFtL/FUVWmw++zeABhAkEA9JPOqXlr" +
"vB/GjLl9g3YJBpPjA7UhWHZ6vn8bUq55noengQQL0l2mrJfEFXVHLs0m9lV3tAURpgpuraLkd/ugaQJATFBITPVhozKkz4LBlCm/Zk9EXIa" +
"GaPge73jg2TAEtsGJQtHPMPW3k21gG7ql19UvOgbsVMz7n6rzoHvshuwzQQJAY92WnQy/OOmgoQV8gplHxi/Mmk7zdrOqGu67sV8cueaaNs" +
"v4J8WlsQOnRTvF/Q43wo3TeuY29p1749qHf5Z3QQJBANnZYSe93QlOT+6PFT1Dkv8osnOY/93CZYD2IvTpfXfqJnbBZ9bkSe7xcxIIqGO6M" +
"JWlZjItnYBZLLHP3JKVgOQ=";
private static final String publicKey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDvs4fG51APnpZ0ctQRyhBq205of6+9cxW6FU858" +
"ALhMz57zns0ATmPutt5iF4fOv3Mgi5Qkc2xptEOTNy0mOrE3pjV7bqVZ29ZVsA9cQ60htCbAoHkv8HgiyPYB2pJzbjH1ZYPuXrGHMtiZchu" +
"ZXXCWoQoADqINpSa+KS1Eo/HyQIDAQAB";
/**
* 加密方法
*
* @param keyString
* @return
*/
public static String encrypt(String keyString) throws Exception {
return encrypt(keyString,publicKey);
}
/**
* 解密方法
*
* @param key
* @return
*/
public static String decrypt(String key) throws Exception {
return decrypt(key,privateKey);
}
/**
* 随机生成密钥对
*
* @throws NoSuchAlgorithmException
*/
public static void genKeyPair() throws NoSuchAlgorithmException {
// KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
// 初始化密钥对生成器,密钥大小为96-1024位
keyPairGen.initialize(1024, new SecureRandom());
// 生成一个密钥对,保存在keyPair中
KeyPair keyPair = keyPairGen.generateKeyPair();
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); // 得到私钥
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); // 得到公钥
String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded()));
// 得到私钥字符串
String privateKeyString = new String(Base64.encodeBase64((privateKey.getEncoded())));
// 将公钥和私钥保存到Map
keyMap.put(0, publicKeyString); //0表示公钥
keyMap.put(1, privateKeyString); //1表示私钥
}
/**
* RSA公钥加密
*
* @param str 加密字符串
* @param publicKey 公钥
* @return 密文
* @throws Exception 加密过程中的异常信息
*/
public static String encrypt(String str, String publicKey) throws Exception {
//base64编码的公钥
byte[] decoded = Base64.decodeBase64(publicKey);
RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
//RSA加密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));
return outStr;
}
/**
* RSA私钥解密
*
* @param str 加密字符串
* @param privateKey 私钥
* @return 铭文
* @throws Exception 解密过程中的异常信息
*/
public static String decrypt(String str, String privateKey) throws Exception {
//64位解码加密后的字符串
byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8"));
//base64编码的私钥
byte[] decoded = Base64.decodeBase64(privateKey);
RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
//RSA解密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, priKey);
String outStr = new String(cipher.doFinal(inputByte));
return outStr;
}
public static void main(String[] args) throws Exception {
//生成公钥和私钥
//genKeyPair();
keyMap.put(0,publicKey);
keyMap.put(1,privateKey);
//加密字符串
String message = "df723820";
System.out.println("随机生成的公钥为:" + keyMap.get(0));
System.out.println("随机生成的私钥为:" + keyMap.get(1));
String messageEn = encrypt(message, keyMap.get(0));
System.out.println(message + "\t加密后的字符串为:" + messageEn);
String messageDe = decrypt(messageEn, keyMap.get(1));
System.out.println("还原后的字符串为:" + messageDe);
}
}
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册