use of com.akaxin.site.storage.bean.UserSessionBean in project openzaly by akaxincom.
the class ApiSiteService method login.
/**
* 执行用户登陆站点行为
*
* @param command
* @return
*/
public CommandResponse login(Command command) {
CommandResponse commandResponse = new CommandResponse().setAction(CommandConst.ACTION_RES);
ErrorCode2 errCode = ErrorCode2.ERROR;
try {
ApiSiteLoginProto.ApiSiteLoginRequest loginRequest = ApiSiteLoginProto.ApiSiteLoginRequest.parseFrom(command.getParams());
String userIdPubk = loginRequest.getUserIdPubk();
String userIdSignBase64 = loginRequest.getUserIdSignBase64();
String userDeviceIdPubk = loginRequest.getUserDeviceIdPubk();
String userDeviceIdSignBase64 = loginRequest.getUserDeviceIdSignBase64();
String userDeviceName = loginRequest.getUserDeviceName();
String userToken = loginRequest.getUserToken();
LogUtils.requestDebugLog(logger, command, loginRequest.toString());
if (StringUtils.isAnyEmpty(userIdPubk, userIdSignBase64)) {
errCode = ErrorCode2.ERROR2_LOGGIN_USERID_EMPTY;
return commandResponse.setErrCode2(errCode);
}
if (StringUtils.isAnyEmpty(userDeviceIdPubk, userDeviceIdSignBase64)) {
errCode = ErrorCode2.ERROR2_LOGGIN_DEVICEID_EMPTY;
return commandResponse.setErrCode2(errCode);
}
// 个人身份公钥,解密Sign签名,解密Key
PublicKey userPubKey = RSACrypto.getRSAPubKeyFromPem(userIdPubk);
Signature userSign = Signature.getInstance("SHA512withRSA");
userSign.initVerify(userPubKey);
// 原文
userSign.update(userIdPubk.getBytes());
boolean userSignResult = userSign.verify(Base64.getDecoder().decode(userIdSignBase64));
logger.debug("userSignResult={}", userSignResult);
if (userSignResult) {
Signature userDeviceSign = Signature.getInstance("SHA512withRSA");
userDeviceSign.initVerify(userPubKey);
// 原文
userDeviceSign.update(userDeviceIdPubk.getBytes());
userSignResult = userDeviceSign.verify(Base64.getDecoder().decode(userDeviceIdSignBase64));
}
logger.debug("deviceSignResult={}", userSignResult);
// 用户身份校验成功,方可执行登陆操作
if (userSignResult) {
// 判断用户,是否已经注册
SimpleUserBean subean = UserProfileDao.getInstance().getSimpleProfileByPubk(userIdPubk);
if (subean == null || StringUtils.isEmpty(subean.getUserId())) {
logger.info("login site: new user need to register before login site");
// 未注册,告知用户执行注册行为
errCode = ErrorCode2.ERROR2_LOGGIN_NOREGISTER;
return commandResponse.setErrCode2(errCode);
}
if (subean.getUserStatus() == UserProto.UserStatus.SEALUP_VALUE) {
logger.info("login site: user no permision as seal up");
// 禁封用户禁止登陆
errCode = ErrorCode2.ERROR2_LOGGIN_SEALUPUSER;
return commandResponse.setErrCode2(errCode);
}
String siteUserId = subean.getUserId();
String deviceId = HashCrypto.MD5(userDeviceIdPubk);
// 保存设备信息
UserDeviceBean deviceBean = new UserDeviceBean();
deviceBean.setDeviceId(deviceId);
deviceBean.setDeviceName(userDeviceName);
deviceBean.setSiteUserId(siteUserId);
deviceBean.setUserDevicePubk(userDeviceIdPubk);
deviceBean.setUserToken(userToken);
deviceBean.setActiveTime(System.currentTimeMillis());
deviceBean.setAddTime(System.currentTimeMillis());
boolean loginResult = SiteLoginDao.getInstance().updateUserDevice(deviceBean);
if (!loginResult) {
// 更新失败,则重新保存数据
loginResult = SiteLoginDao.getInstance().saveUserDevice(deviceBean);
}
logger.debug("login site: save device result={} deviceBean={}", loginResult, deviceBean.toString());
if (loginResult) {
// 生成session
String sessionId = UUID.randomUUID().toString();
UserSessionBean sessionBean = new UserSessionBean();
sessionBean.setLoginTime(System.currentTimeMillis());
sessionBean.setSiteUserId(siteUserId);
sessionBean.setOnline(true);
sessionBean.setSessionId(sessionId);
sessionBean.setDeviceId(deviceId);
// 上次登陆(auth)时间
sessionBean.setLoginTime(System.currentTimeMillis());
loginResult = loginResult && SiteLoginDao.getInstance().saveUserSession(sessionBean);
if (loginResult) {
ApiSiteLoginProto.ApiSiteLoginResponse response = ApiSiteLoginProto.ApiSiteLoginResponse.newBuilder().setSiteUserId(siteUserId).setUserSessionId(sessionId).build();
commandResponse.setParams(response.toByteArray());
errCode = ErrorCode2.SUCCESS;
} else {
errCode = ErrorCode2.ERROR2_LOGGIN_UPDATE_SESSION;
}
} else {
errCode = ErrorCode2.ERROR2_LOGGIN_UPDATE_DEVICE;
}
} else {
errCode = ErrorCode2.ERROR2_LOGGIN_ERRORSIGN;
}
} catch (Exception e) {
errCode = ErrorCode2.ERROR_SYSTEMERROR;
LogUtils.requestErrorLog(logger, command, e);
}
return commandResponse.setErrCode2(errCode);
}
Aggregations