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

20190827 日志异步存储

上级 7cb7027e
流水线 #13687 已失败 于阶段
in 2 second
...@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
import com.pica.cloud.account.account.server.entity.*; import com.pica.cloud.account.account.server.entity.*;
import com.pica.cloud.account.account.server.enums.EnumsType; import com.pica.cloud.account.account.server.enums.EnumsType;
import com.pica.cloud.account.account.server.enums.ExceptionType; import com.pica.cloud.account.account.server.enums.ExceptionType;
import com.pica.cloud.account.account.server.log.PicaLogUtils;
import com.pica.cloud.account.account.server.req.RegisterReq; import com.pica.cloud.account.account.server.req.RegisterReq;
import com.pica.cloud.account.account.server.service.*; import com.pica.cloud.account.account.server.service.*;
import com.pica.cloud.account.account.server.util.AccountUtils; import com.pica.cloud.account.account.server.util.AccountUtils;
...@@ -54,7 +55,6 @@ public class LoginController extends AccountBaseController { ...@@ -54,7 +55,6 @@ public class LoginController extends AccountBaseController {
@Autowired @Autowired
private AccountUtils accountUtils; private AccountUtils accountUtils;
@ApiOperation("登录接口") @ApiOperation("登录接口")
@PostMapping("/login") @PostMapping("/login")
public PicaResponse<String> loginByPassword(@RequestBody String params) throws Exception { public PicaResponse<String> loginByPassword(@RequestBody String params) throws Exception {
...@@ -230,7 +230,9 @@ public class LoginController extends AccountBaseController { ...@@ -230,7 +230,9 @@ public class LoginController extends AccountBaseController {
account.setCreatTime(new Date()); account.setCreatTime(new Date());
account.setRegisterSource(super.getSourceType()); account.setRegisterSource(super.getSourceType());
String newToken = tokenUtils.generateToken(account); String newToken = tokenUtils.generateToken(account);
AccountUser accountUser = cacheClient.getToken(newToken, AccountUser.class); AccountUser accountUser = cacheClient.getToken(newToken, AccountUser.class);
accountUser.setLoginFrom(super.getSourceType()); accountUser.setLoginFrom(super.getSourceType());
accountUser.setLoginPlatform(super.getProductType()); accountUser.setLoginPlatform(super.getProductType());
accountUser.setLoginIp(super.getIpAddr()); accountUser.setLoginIp(super.getIpAddr());
......
package com.pica.cloud.account.account.server.entity; package com.pica.cloud.account.account.server.entity;
import com.pica.cloud.account.account.server.log.PicaLogEntity;
import java.util.Date; import java.util.Date;
public class AccountInfo { public class AccountInfo extends PicaLogEntity {
private Long id; private Long id;
private String password; private String password;
......
package com.pica.cloud.account.account.server.entity; package com.pica.cloud.account.account.server.entity;
import com.pica.cloud.account.account.server.log.PicaLogEntity;
import java.util.Date; import java.util.Date;
public class LogPasswordModify { public class LogPasswordModify extends PicaLogEntity {
private Long id; private Long id;
......
package com.pica.cloud.account.account.server.entity; package com.pica.cloud.account.account.server.entity;
import com.pica.cloud.account.account.server.log.PicaLogEntity;
import java.util.Date; import java.util.Date;
public class LoginLog { public class LoginLog extends PicaLogEntity {
public LoginLog() { public LoginLog() {
this.loginTime = new Date(); this.loginTime = new Date();
...@@ -86,8 +88,9 @@ public class LoginLog { ...@@ -86,8 +88,9 @@ public class LoginLog {
return loginType; return loginType;
} }
public void setLoginType(Integer loginType) { public LoginLog setLoginType(Integer loginType) {
this.loginType = loginType; this.loginType = loginType;
return this;
} }
public String getLoginIp() { public String getLoginIp() {
...@@ -102,16 +105,17 @@ public class LoginLog { ...@@ -102,16 +105,17 @@ public class LoginLog {
return loginPlatform; return loginPlatform;
} }
public void setLoginPlatform(Integer loginPlatform) { public LoginLog setLoginPlatform(Integer loginPlatform) {
this.loginPlatform = loginPlatform; this.loginPlatform = loginPlatform;
return this;
} }
public Integer getLoginStatus() { public Integer getLoginStatus() {
return loginStatus; return loginStatus;
} }
public void setLoginStatus(Integer loginStatus) { public void setLoginStatus(Integer loginStatus) {
this.loginStatus = loginStatus; this.loginStatus = loginStatus;
} }
public Integer getCreateId() { public Integer getCreateId() {
......
...@@ -32,10 +32,14 @@ public enum EnumsType { ...@@ -32,10 +32,14 @@ public enum EnumsType {
SYSCODE_TYPE_RESET_PASSWORD(4, "重置密码"), SYSCODE_TYPE_RESET_PASSWORD(4, "重置密码"),
//联合登录类型 //联合登录类型
UNION_LOGIN_WE_CHAT(1,"微信"), UNION_LOGIN_WE_CHAT(1, "微信"),
UNION_LOGIN_QQ(2,"QQ"), UNION_LOGIN_QQ(2, "QQ"),
union_login_blog(3,"微博"); union_login_blog(3, "微博"),
//日志类型枚举
LOG_TYPE_LOGIN(1, "登录日志"),
LOG_TYPE_PASSWORD(2, "密码更新日志"),
LOG_TYPE_USER_INFO(3, "用户信息更新日志");
private int code; private int code;
private String type; private String type;
......
package com.pica.cloud.account.account.server.log;
/**
* 日志记录
*/
public class PicaLogEntity {
//标记当前记录的是哪种日志
private int logType;
public int getLogType() {
return logType;
}
public void setLogType(int logType) {
this.logType = logType;
}
}
package com.pica.cloud.account.account.server.log;
import com.pica.cloud.account.account.server.entity.AccountInfo;
import com.pica.cloud.account.account.server.entity.LogPasswordModify;
import com.pica.cloud.account.account.server.entity.LoginLog;
import com.pica.cloud.account.account.server.enums.EnumsType;
import com.pica.cloud.account.account.server.mapper.AccountDetailsMapper;
import com.pica.cloud.account.account.server.mapper.LogPwdModifyMapper;
import com.pica.cloud.account.account.server.mapper.LogLoginMapper;
import org.springframework.beans.factory.annotation.Autowired;
public class PicaLogTask implements Runnable {
@Autowired
private LogLoginMapper loginLogMapper;
@Autowired
private LogPwdModifyMapper logPasswordModifyMapper;
@Autowired
private AccountDetailsMapper accountDetailsMapper;
/**
* 日志类型
*/
private int type;
/**
* 日志内容
*/
private PicaLogEntity picaLogEntity;
PicaLogTask(PicaLogEntity picaLogEntity) {
this.picaLogEntity = picaLogEntity;
type = picaLogEntity.getLogType();
}
@Override
public void run() {
if (type == EnumsType.LOG_TYPE_LOGIN.getCode()) {
loginLogMapper.insertSelective((LoginLog) picaLogEntity);
} else if (type == EnumsType.LOG_TYPE_PASSWORD.getCode()) {
logPasswordModifyMapper.insertSelective((LogPasswordModify) picaLogEntity);
} else if (type == EnumsType.LOG_TYPE_USER_INFO.getCode()) {
accountDetailsMapper.insertSelective((AccountInfo) picaLogEntity);
}
}
}
package com.pica.cloud.account.account.server.log;
import org.springframework.stereotype.Component;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@Component
public class PicaLogUtils {
/**
* 开启一个线程池
*/
ExecutorService executor = Executors.newFixedThreadPool(30);
/**
* 日志记录方法
*
* @param picaLogEntity
*/
public void info(PicaLogEntity picaLogEntity) {
executor.submit(new PicaLogTask(picaLogEntity));
}
}
...@@ -3,7 +3,7 @@ package com.pica.cloud.account.account.server.mapper; ...@@ -3,7 +3,7 @@ package com.pica.cloud.account.account.server.mapper;
import com.pica.cloud.account.account.server.entity.LoginLog; import com.pica.cloud.account.account.server.entity.LoginLog;
public interface LoginLogMapper { public interface LogLoginMapper {
int insert(LoginLog record); int insert(LoginLog record);
......
...@@ -3,7 +3,7 @@ package com.pica.cloud.account.account.server.mapper; ...@@ -3,7 +3,7 @@ package com.pica.cloud.account.account.server.mapper;
import com.pica.cloud.account.account.server.entity.LogPasswordModify; import com.pica.cloud.account.account.server.entity.LogPasswordModify;
public interface LogPasswordModifyMapper { public interface LogPwdModifyMapper {
int deleteByPrimaryKey(Long id); int deleteByPrimaryKey(Long id);
int insert(LogPasswordModify record); int insert(LogPasswordModify record);
......
...@@ -4,8 +4,9 @@ import com.pica.cloud.account.account.server.entity.AccountContact; ...@@ -4,8 +4,9 @@ import com.pica.cloud.account.account.server.entity.AccountContact;
import com.pica.cloud.account.account.server.entity.AccountInfo; import com.pica.cloud.account.account.server.entity.AccountInfo;
import com.pica.cloud.account.account.server.entity.AccountUser; import com.pica.cloud.account.account.server.entity.AccountUser;
import com.pica.cloud.account.account.server.entity.LoginLog; import com.pica.cloud.account.account.server.entity.LoginLog;
import com.pica.cloud.account.account.server.enums.EnumsType;
import com.pica.cloud.account.account.server.log.PicaLogUtils;
import com.pica.cloud.account.account.server.mapper.AccountDetailsMapper; import com.pica.cloud.account.account.server.mapper.AccountDetailsMapper;
import com.pica.cloud.account.account.server.mapper.LoginLogMapper;
import com.pica.cloud.account.account.server.service.AccountContactService; import com.pica.cloud.account.account.server.service.AccountContactService;
import com.pica.cloud.account.account.server.service.AccountLoginService; import com.pica.cloud.account.account.server.service.AccountLoginService;
import com.pica.cloud.account.account.server.util.AccountUtils; import com.pica.cloud.account.account.server.util.AccountUtils;
...@@ -16,19 +17,23 @@ import org.springframework.stereotype.Service; ...@@ -16,19 +17,23 @@ import org.springframework.stereotype.Service;
@Service @Service
public class AccountLoginServiceImpl implements AccountLoginService { public class AccountLoginServiceImpl implements AccountLoginService {
@Autowired
private LoginLogMapper loginLogMapper;
@Autowired @Autowired
private AccountContactService accountContactServer; private AccountContactService accountContactServer;
@Autowired @Autowired
private AccountDetailsMapper accountDetailsMapper; private AccountDetailsMapper accountDetailsMapper;
@Autowired
private PicaLogUtils picaLogUtils;
@Override @Override
public void insertLoginLog(AccountUser accountUser, Integer loginType, Integer status) { public void insertLoginLog(AccountUser accountUser, Integer loginType, Integer status) {
LoginLog loginLog = AccountUtils.getLoginLog(accountUser); LoginLog loginLog = AccountUtils.getLoginLog(accountUser);
loginLog.setLoginStatus(status); loginLog.setLoginStatus(status);
loginLog.setLoginType(loginType); loginLog.setLoginType(loginType);
loginLogMapper.insertSelective(loginLog); loginLog.setLogType(EnumsType.LOG_TYPE_LOGIN.getCode());
picaLogUtils.info(loginLog);
// loginLogMapper.insertSelective(loginLog);
} }
@Override @Override
......
...@@ -6,7 +6,7 @@ import com.pica.cloud.account.account.server.entity.AccountInfo; ...@@ -6,7 +6,7 @@ import com.pica.cloud.account.account.server.entity.AccountInfo;
import com.pica.cloud.account.account.server.entity.LogPasswordModify; import com.pica.cloud.account.account.server.entity.LogPasswordModify;
import com.pica.cloud.account.account.server.mapper.AccountContactMapper; import com.pica.cloud.account.account.server.mapper.AccountContactMapper;
import com.pica.cloud.account.account.server.mapper.AccountDetailsMapper; import com.pica.cloud.account.account.server.mapper.AccountDetailsMapper;
import com.pica.cloud.account.account.server.mapper.LogPasswordModifyMapper; import com.pica.cloud.account.account.server.mapper.LogPwdModifyMapper;
import com.pica.cloud.account.account.server.req.ForgetPasswordReq; import com.pica.cloud.account.account.server.req.ForgetPasswordReq;
import com.pica.cloud.account.account.server.req.PasswordReq; import com.pica.cloud.account.account.server.req.PasswordReq;
import com.pica.cloud.account.account.server.service.PasswordService; import com.pica.cloud.account.account.server.service.PasswordService;
...@@ -21,7 +21,7 @@ public class PasswordServiceImpl implements PasswordService { ...@@ -21,7 +21,7 @@ public class PasswordServiceImpl implements PasswordService {
private AccountDetailsMapper accountDetailsMapper; private AccountDetailsMapper accountDetailsMapper;
@Autowired @Autowired
private LogPasswordModifyMapper logPasswordModifyMapper; private LogPwdModifyMapper logPasswordModifyMapper;
@Autowired @Autowired
private AccountContactMapper accountContactMapper; private AccountContactMapper accountContactMapper;
......
...@@ -107,8 +107,8 @@ public class AccountUtils { ...@@ -107,8 +107,8 @@ public class AccountUtils {
* @return * @return
*/ */
public static <T> T getRequestEntity(String params, Class<T> zClass) throws Exception { public static <T> T getRequestEntity(String params, Class<T> zClass) throws Exception {
// String json = RSAUtils.decryptByPrivateKey(params,RSAUtils.PRIVATE_KEY); String json = EncryptCreateUtil.dencrypt(params);
return JSONObject.parseObject(params, zClass); return JSONObject.parseObject(json, zClass);
} }
/** /**
......
package com.pica.cloud.account.account.server.util;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.security.MessageDigest;
public class BASE64Utils {
public static final String KEY_SHA = "SHA";
public static final String KEY_MD5 = "MD5";
/**
* BASE64解密
*
* @param key
* @return
* @throws Exception
*/
public static byte[] decryptBASE64(String key) throws Exception {
return (new BASE64Decoder()).decodeBuffer(key);
}
/**
* BASE64加密
*
* @param key
* @return
* @throws Exception
*/
public static String encryptBASE64(byte[] key) throws Exception {
return (new BASE64Encoder()).encodeBuffer(key);
}
/**
* MD5加密
*
* @param data
* @return
* @throws Exception
*/
public static byte[] encryptMD5(byte[] data) throws Exception {
MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);
md5.update(data);
return md5.digest();
}
/**
* SHA加密
*
* @param data
* @return
* @throws Exception
*/
public static byte[] encryptSHA(byte[] data) throws Exception {
MessageDigest sha = MessageDigest.getInstance(KEY_SHA);
sha.update(data);
return sha.digest();
}
}
package com.pica.cloud.account.account.server.util; package com.pica.cloud.account.account.server.util;
import com.alibaba.fastjson.JSONObject;
import javax.crypto.Cipher; import com.pica.cloud.foundation.utils.utils.EncryptCreateUtil;
import org.apache.tomcat.util.codec.binary.Base64;
import javax.crypto.Cipher;
import java.security.*; import java.security.*;
import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey; import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec; import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
/** /**
* RSA加解密工具类 * RSA加解密工具类
*/ */
public class RSAUtils extends BASE64Utils { public class RSAUtils {
/** private static Map<Integer, String> keyMap = new HashMap<Integer, String>(); //用于封装随机产生的公钥与私钥
* 不能修改
*/ public static final String privateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMm7RmZA2q81N6KCIOcEdEP2w5mQ" +
public static final String PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOzS18i+vI6UdPB3snRz1BzwPyaLRHPwlT4a3lu" + "4/3r9hJMadsHPxfsK/k8dNKRCg+rD0abtWs+Ldi7Y7GSN6LB00wW+8wQFAvWr7SVL3jCxpc0zSXPKNZqHyh3Tnn+fj8GMhjMgzaDtb5HcEX" +
"9ETUDbe2yKH+4lriAJpUOEA7oxEF+rucoDpFFcLMt3wx9yqnFNkyhz5FRt7ijUskzJHEHla/uPDyaenAEjYZtToIsUlhlmTSpDtQVXAoXIl5/" + "cOMHNP26CJb3nLEV/7MC8hN8zPtqieNBcEnUHAgMBAAECgYBsmxFsrY/OchUwvWQfW6uIh4qI25OTOfzxnwgCbmVOaMzH0v+F+aX0B4Ei32" +
"JF1QcdRpxGJrSwn5QgmXaZ+QIDAQAB"; "ONiB1AqKokiHbBfh5WwazwENvpCtTJyaX0H/mwQs9/ECitzkhJcbev8zGFWuMB3E19NDshcnHxtMclupPPZ4IkvaiXKhbfrga2xZtvXmgsL" +
"eVROQJBAOzw087YysB8wDoKjWurEnka87wUEDmUKVm5rZC9p3mxWmlPB2Y5CuoBBMpuZJjasUssORx3/cboeDmdzLOVAcUCQQDZ9Wgh5iz9" +
"c0ZfFdjfL9rVTnn6nMA/8cscrQf9Jzc4Gjej+SX5qRBqsBKGSXXwI2mneGr5NjXEdnJ5hIt5wMRbAkEArPlTZ5pUyhlIrBawD34gSlEmxpN" +
"PFPnZBivLTfNmpCyZeG+9Ux8pnJOJz86vmfdtnxd1yha/KcrkmgtdOWz6kQJAPGsp1ZPPzuZAkKUmvB+w4sZhS9Zd+JvXOPjCKSvQw82ItP" +
"ygyUdTVK/AQtdkSRAX/qODy9d6Kh7HduYGH9cO1wJBAJQVW/C/mzbg9HKV3Vdj3Wp59Cq4Y19jpTnWS0S25q1cAZwmhmiuyzHh0xDT1iXGk" +
"qSdzSEFbNWlEQHHVCyasWo=";
private static final String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJu0ZmQNqvNTeigiDnBHRD9sOZkOP96/YSTGnbB" +
"z8X7Cv5PHTSkQoPqw9Gm7VrPi3Yu2OxkjeiwdNMFvvMEBQL1q+0lS94wsaXNM0lzyjWah8od055/n4/BjIYzIM2g7W+R3BF3DjBzT9ugiW9" +
"5yxFf+zAvITfMz7aonjQXBJ1BwIDAQAB";
/**
* 不能修改
*/
public static final String PRIVATE_KEY = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAI7NLXyL68jpR08HeydHPUHPA/JotEc/" +
"CVPhreW70RNQNt7bIof7iWuIAmlQ4QDujEQX6u5ygOkUVwsy3fDH3KqcU2TKHPkVG3uKNSyTMkcQeVr+48PJp6cASNhm1OgixSWGWZNKkO1BVcC" +
"hciXn8kXVBx1GnEYmtLCflCCZdpn5AgMBAAECgYBJp6Sdh+IO19vy9E3ePY1oAynq/3x0/xuFi3LReuVlC8uxeN+/ucrwjs+HmLLlcyUf/iIr6R" +
"16mwYmfY8iIUQ8ZOCM8Wfqw/1l3WpsUygU08O8JKj9mZJmb8cmLhe7ldL/I5mdLt/VqQExemEnDJVp2B1Cj095P40Ug3aH4j/UcQJBAPJvIlKP8" +
"oXP282gwQQD+dulTsVk3o5tziJcp2CsS3O+3aIa/mIYrxKlifdex7I6s7VPqSLXhJE+W/aplvFDJ00CQQCWys6iQfsGvXlwnhIL0aw6yMOlkMgV" +
"xqo03A2aGJMCJQN2XYzuAXG2V54Utd1psGc5im7TlwJfh8ORC3iqCx9dAkAPkADFCgaIfnperdYWGuc8KVVwKHR88iGMZSQ9eXHygSsbD96Kj4k" +
"Viljb71KkZ05H8lAqM2mIJVej8ukEncn1AkAl3iRqJvutQ6PdnjSV9z+zO3u2dldo8I0J3UElM4qnfTgTX4bmtkIiMnqmZM2Hnx8tGhCe3ktgRi" +
"3cnO7edRCZAkEA0Ga3amAEafBN0LEP7UzrWQ3tMoytZ51snEKJHhobGLxzJCxNvwm0KQKEru24THYKGeVYUo/kjYWbiBvm3aEsYw==";
public static void main(String[] args) throws Exception {
String message="{\"mobile\":\"13024112588\",\"password\":\"qq123456\"}";
public static final String KEY_ALGORITHM = "RSA";
public static final String SIGNATURE_ALGORITHM = "MD5withRSA";
// private static final String PUBLIC_KEY = "RSAPublicKey"; String encrypt = EncryptCreateUtil.encrypt(message);
// private static final String PRIVATE_KEY = "RSAPrivateKey"; System.out.println(encrypt);
System.out.println( EncryptCreateUtil.dencrypt(encrypt));
/**
* 用私钥对信息生成数字签名
*
* @param data 加密数据
* @param privateKey 私钥
* @return
* @throws Exception
*/
public static String sign(String data, String privateKey) throws Exception {
return sign(data.getBytes(), privateKey);
}
/** //生成公钥和私钥
* 用私钥对信息生成数字签名 genKeyPair();
* //加密字符串
* @param data 加密数据 // String message = "13024112588";
* @param privateKey 私钥 // System.out.println("随机生成的公钥为:" + keyMap.get(0));
* @return // System.out.println("随机生成的私钥为:" + keyMap.get(1));
* @throws Exception // String messageEn = encrypt(message,keyMap.get(0));
*/ // System.out.println(message + "\t加密后的字符串为:" + messageEn);
public static String sign(byte[] data, String privateKey) throws Exception { // String messageDe = decrypt(messageEn,keyMap.get(1));
// 解密由base64编码的私钥 // System.out.println("还原后的字符串为:" + messageDe);
byte[] keyBytes = decryptBASE64(privateKey);
// 构造PKCS8EncodedKeySpec对象
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
// KEY_ALGORITHM 指定的加密算法 // String messageEn = encrypt(message, publicKey);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); // System.out.println(message + "\t加密后的字符串为:" + messageEn);
// String messageDe = decrypt(messageEn, privateKey);
// System.out.println("还原后的字符串为:" + messageDe);
// 取私钥匙对象
PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);
// 用私钥对信息生成数字签名
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
signature.initSign(priKey);
signature.update(data);
return encryptBASE64(signature.sign());
} }
/** /**
* 校验数字签名 * 随机生成密钥对
* *
* @param data 加密数据 * @throws NoSuchAlgorithmException
* @param publicKey 公钥 */
* @param sign 数字签名 public static void genKeyPair() throws NoSuchAlgorithmException {
* @return 校验成功返回true 失败返回false // KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象
* @throws Exception KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
*/ // 初始化密钥对生成器,密钥大小为96-1024位
public static boolean verify(String data, String publicKey, String sign) throws Exception { keyPairGen.initialize(1024, new SecureRandom());
return verify(data.getBytes(), publicKey, sign); // 生成一个密钥对,保存在keyPair中
KeyPair keyPair = keyPairGen.generateKeyPair();
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); // 得到私钥
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); // 得到公钥
String publicKeyString = new String(org.apache.tomcat.util.codec.binary.Base64.encodeBase64(publicKey.getEncoded()));
// 得到私钥字符串
String privateKeyString = new String(org.apache.tomcat.util.codec.binary.Base64.encodeBase64((privateKey.getEncoded())));
// 将公钥和私钥保存到Map
keyMap.put(0, publicKeyString); //0表示公钥
keyMap.put(1, privateKeyString); //1表示私钥
} }
/** /**
* 校验数字签名 * RSA公钥加密
* *
* @param data 加密数据 * @param str 加密字符串
* @param publicKey 公钥 * @param publicKey 公钥
* @param sign 数字签名 * @return 密文
* @return 校验成功返回true 失败返回false * @throws Exception 加密过程中的异常信息
* @throws Exception
*/
public static boolean verify(byte[] data, String publicKey, String sign) throws Exception {
// 解密由base64编码的公钥
byte[] keyBytes = decryptBASE64(publicKey);
// 构造X509EncodedKeySpec对象
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
// KEY_ALGORITHM 指定的加密算法
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
// 取公钥匙对象
PublicKey pubKey = keyFactory.generatePublic(keySpec);
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
signature.initVerify(pubKey);
signature.update(data);
// 验证签名是否正常
return signature.verify(decryptBASE64(sign));
}
/**
* 解密<br>
* 用私钥解密
*
* @param data
* @param key
* @return
* @throws Exception
*/ */
public static String decryptByPrivateKey(String data, String key) throws Exception { public static String encrypt(String str, String publicKey) throws Exception {
return new String(decryptByPrivateKey(decryptBASE64(data), key)); //base64编码的公钥
byte[] decoded = org.apache.tomcat.util.codec.binary.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 = org.apache.tomcat.util.codec.binary.Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));
return outStr;
} }
/** /**
* 解密<br> * RSA私钥解密
* 用私钥解密
* *
* @param data * @param str 加密字符串
* @param key * @param privateKey 私钥
* @return * @return 铭文
* @throws Exception * @throws Exception 解密过程中的异常信息
*/ */
public static byte[] decryptByPrivateKey(byte[] data, String key) throws Exception { public static String decrypt(String str, String privateKey) throws Exception {
// 对密钥解密 //64位解码加密后的字符串
byte[] keyBytes = decryptBASE64(key); byte[] inputByte = org.apache.tomcat.util.codec.binary.Base64.decodeBase64(str.getBytes("UTF-8"));
//base64编码的私钥
// 取得私钥 byte[] decoded = Base64.decodeBase64(privateKey);
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); //RSA解密
Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec); Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, priKey);
// 对数据解密 String outStr = new String(cipher.doFinal(inputByte));
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); return outStr;
cipher.init(Cipher.DECRYPT_MODE, privateKey);
return cipher.doFinal(data);
}
/**
* 解密<br>
* 用私钥解密
*
* @param data
* @param key
* @return
* @throws Exception
*/
public static String decryptByPublicKey(String data, String key) throws Exception {
return new String(decryptByPublicKey(decryptBASE64(data), key));
}
/**
* 解密<br>
* 用私钥解密
*
* @param data
* @param key
* @return
* @throws Exception
*/
public static byte[] decryptByPublicKey(byte[] data, String key) throws Exception {
// 对密钥解密
byte[] keyBytes = decryptBASE64(key);
// 取得公钥
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key publicKey = keyFactory.generatePublic(x509KeySpec);
// 对数据解密
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE, publicKey);
return cipher.doFinal(data);
}
/**
* 加密<br>
* 用公钥加密
*
* @param data
* @param key
* @return
* @throws Exception
*/
public static String encryptByPublicKey(String data, String key) throws Exception {
return encryptBASE64(encryptByPublicKey(data.getBytes(), key));
}
/**
* 加密<br>
* 用公钥加密
*
* @param data
* @param key
* @return
* @throws Exception
*/
public static byte[] encryptByPublicKey(byte[] data, String key) throws Exception {
// 对公钥解密
byte[] keyBytes = decryptBASE64(key);
// 取得公钥
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key publicKey = keyFactory.generatePublic(x509KeySpec);
// 对数据加密
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
return cipher.doFinal(data);
}
/**
* 加密<br>
* 用私钥加密
*
* @param data
* @param key
* @return
* @throws Exception
*/
public static String encryptByPrivateKey(String data, String key) throws Exception {
return encryptBASE64(encryptByPrivateKey(data.getBytes(), key));
}
/**
* 加密<br>
* 用私钥加密
*
* @param data
* @param key
* @return
* @throws Exception
*/
public static byte[] encryptByPrivateKey(byte[] data, String key) throws Exception {
// 对密钥解密
byte[] keyBytes = decryptBASE64(key);
// 取得私钥
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec);
// 对数据加密
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
return cipher.doFinal(data);
}
/**
* 取得私钥
*
* @param keyMap
* @return
* @throws Exception
*/
public static String getPrivateKey(Map<String, Object> keyMap) throws Exception {
Key key = (Key) keyMap.get(PRIVATE_KEY);
return encryptBASE64(key.getEncoded());
}
/**
* 取得公钥
*
* @param keyMap
* @return
* @throws Exception
*/
public static String getPublicKey(Map<String, Object> keyMap) throws Exception {
Key key = (Key) keyMap.get(PUBLIC_KEY);
return encryptBASE64(key.getEncoded());
}
/**
* 初始化密钥
*
* @return
* @throws Exception
*/
public static Map<String, Object> initKey() throws Exception {
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
keyPairGen.initialize(1024);
KeyPair keyPair = keyPairGen.generateKeyPair();
// 公钥
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
// 私钥
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
Map<String, Object> keyMap = new HashMap<String, Object>(2);
keyMap.put(PUBLIC_KEY, publicKey);
keyMap.put(PRIVATE_KEY, privateKey);
return keyMap;
}
public static void main(String[] args) throws Exception {
// String[] keyPair = getKeyPair();
// System.out.println("公钥:" + keyPair[0]);
// System.out.println("私钥:" + keyPair[1]);
//
// String str = "测试加解密效果";
// //公钥加密
// String encrypt = encrypt(str, getPublicKey());
// //私钥解密
// String decrypt = decrypt(encrypt, getPrivateKey());
// System.out.println(decrypt);
// Map<String, Object> map = RSAUtils.initKey();
// String publicKey = RSAUtils.getPublicKey(map);
// String privateKey = RSAUtils.getPrivateKey(map);
// System.out.println("公钥:" + publicKey);
// System.out.println("私钥:" + privateKey);
// String data = "Java是世界上最好的编程语言";
// String encryptData = RSAUtils.encryptByPublicKey(data, PUBLIC_KEY);
// System.out.println("加密后:" + encryptData);
// String decryptData = RSAUtils.decryptByPrivateKey(encryptData, PRIVATE_KEY);
// System.out.println("解密后:" + decryptData);
System.out.println("----------------->");
//测试数据
JSONObject jsonObject = new JSONObject();
jsonObject.put("mobilePhone", "13024112588");
jsonObject.put("flag", "0");
String params = jsonObject.toJSONString();
String result = encryptByPublicKey(params, PUBLIC_KEY);
String decrypt1 = decryptByPrivateKey(result, PRIVATE_KEY);
System.out.println(result);
System.out.println(decrypt1);
} }
} }
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.pica.cloud.account.account.server.mapper.LogPasswordModifyMapper" > <mapper namespace="com.pica.cloud.account.account.server.mapper.LogPwdModifyMapper" >
<resultMap id="BaseResultMap" type="com.pica.cloud.account.account.server.entity.LogPasswordModify" > <resultMap id="BaseResultMap" type="com.pica.cloud.account.account.server.entity.LogPasswordModify" >
<id column="id" property="id" jdbcType="BIGINT" /> <id column="id" property="id" jdbcType="BIGINT" />
<result column="mobile_phone" property="mobilePhone" jdbcType="VARCHAR" /> <result column="mobile_phone" property="mobilePhone" jdbcType="VARCHAR" />
......
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.pica.cloud.account.account.server.mapper.LoginLogMapper" > <mapper namespace="com.pica.cloud.account.account.server.mapper.LogLoginMapper" >
<resultMap id="BaseResultMap" type="com.pica.cloud.account.account.server.entity.LoginLog" > <resultMap id="BaseResultMap" type="com.pica.cloud.account.account.server.entity.LoginLog" >
<id column="id" property="id" jdbcType="INTEGER" /> <id column="id" property="id" jdbcType="INTEGER" />
<result column="acct_id" property="acctId" jdbcType="INTEGER" /> <result column="acct_id" property="acctId" jdbcType="INTEGER" />
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册