|
@@ -84,6 +84,9 @@ public class SaasLoginController {
|
|
|
if (SaasCommonConstant.STATUS_1 != account.getValid()) {
|
|
|
return ResponseResultUtil.errorResult(ResponseCode.A0220.getCode(), "此账号已停用");
|
|
|
}
|
|
|
+ if (!account.getAppId().contains(loginVO.getAppId())) {
|
|
|
+ return ResponseResultUtil.errorResult(ResponseCode.A0220.getCode(), "此账号不允许在此端登录");
|
|
|
+ }
|
|
|
// 验证是否在有效期内
|
|
|
if (SaasCommonConstant.STR_STATUS_0.equals(account.getValidLast())) {
|
|
|
Date date = new Date();
|
|
@@ -108,7 +111,7 @@ public class SaasLoginController {
|
|
|
return ResponseResultUtil.errorResult("登录信息更新失败");
|
|
|
}
|
|
|
account.setPassword(null);
|
|
|
- String token = this.setRedisToken(account, loginVO.isRemember(), false);
|
|
|
+ String token = this.setRedisToken(account, loginVO.getAppId(), loginVO.isRemember(), false);
|
|
|
response.setHeader(CipherConstans.TOKEN_HEADER_TOKEN, token);
|
|
|
return ResponseResultUtil.successResult(account);
|
|
|
}
|
|
@@ -131,7 +134,7 @@ public class SaasLoginController {
|
|
|
if (account == null) {
|
|
|
return ResponseResultUtil.errorResult(ResponseCode.A0402.getCode(), "账号信息不存在");
|
|
|
}
|
|
|
- String token = this.setRedisToken(account, true, true);
|
|
|
+ String token = this.setRedisToken(account, queryVO.getAppId(), true, true);
|
|
|
response.setHeader(CipherConstans.TOKEN_HEADER_TOKEN, token);
|
|
|
return ResponseResultUtil.successResult(account);
|
|
|
}
|
|
@@ -158,12 +161,13 @@ public class SaasLoginController {
|
|
|
/**
|
|
|
* 设置此账号的token,存入redis,如果redis中已存在,只追加有效期
|
|
|
* @param account
|
|
|
+ * @param loginApp
|
|
|
* @param remember
|
|
|
* @param isEqual 是否验证一致
|
|
|
* @return
|
|
|
* @throws UnsupportedEncodingException
|
|
|
*/
|
|
|
- private String setRedisToken(SaasAccount account, boolean remember, boolean isEqual) throws UnsupportedEncodingException {
|
|
|
+ private String setRedisToken(SaasAccount account, String loginApp, boolean remember, boolean isEqual) throws UnsupportedEncodingException {
|
|
|
// 生成token,并验证之前登录是否为记住登录
|
|
|
SecureAES aes = new SecureAES(properties.getAesKey(), properties.getAesIv());
|
|
|
// 对称性加密用户信息
|
|
@@ -175,13 +179,13 @@ public class SaasLoginController {
|
|
|
// 判断是否与redis中一致,不一致,返回错误信息
|
|
|
boolean result = this.bouncycastleCipher.isEqual(sign, account.getId());
|
|
|
if (!result) {
|
|
|
- throw new BusinessException("该账户未登录,请先登录");
|
|
|
+ throw new BusinessException(ResponseCode.A0301.getCode(), ResponseCode.A0301.getDesc());
|
|
|
}
|
|
|
}
|
|
|
this.redisTemplate.expire(account.getId(), Long.parseLong(this.properties.getTokenExpire()), TimeUnit.MINUTES);
|
|
|
} else {
|
|
|
// 加密串MD5加密转为sign,redis:key-账号ID,value-sign(data-MD5加密后)
|
|
|
- sign = this.bouncycastleCipher.encrypt(this.tokenInfo(data), account.getId(), DigestAlgorithm.MD5, Long.parseLong(this.properties.getTokenExpire()), TimeUnit.MINUTES);
|
|
|
+ sign = this.bouncycastleCipher.encrypt(this.tokenInfo(data, loginApp), account.getId(), DigestAlgorithm.MD5, Long.parseLong(this.properties.getTokenExpire()), TimeUnit.MINUTES);
|
|
|
}
|
|
|
// token=data.sign
|
|
|
String token = data + SaasCommonConstant.POINT_JOIN_SYMBOL + sign;
|
|
@@ -201,7 +205,6 @@ public class SaasLoginController {
|
|
|
JSONObject object = new JSONObject();
|
|
|
object.put(SaasCommonConstant.REMEMBER, remember);
|
|
|
object.put(SaasCommonConstant.GROUP_CODE, saasAccount.getGroupCode());
|
|
|
- object.put(SaasCommonConstant.APP_ID, saasAccount.getAppId());
|
|
|
object.put(SaasCommonConstant.ACCOUNT_ID, saasAccount.getId());
|
|
|
return object;
|
|
|
}
|
|
@@ -210,13 +213,12 @@ public class SaasLoginController {
|
|
|
* 账号信息
|
|
|
*
|
|
|
* @param groupCode
|
|
|
- * @param appId
|
|
|
- * @param accountId
|
|
|
- * @param accountBelong
|
|
|
+ * @param loginApp
|
|
|
* @return
|
|
|
*/
|
|
|
- private String tokenInfo(String content) {
|
|
|
+ private String tokenInfo(String content, String loginApp) {
|
|
|
JSONObject object = new JSONObject();
|
|
|
+ object.put(SaasCommonConstant.APP_ID, loginApp);
|
|
|
object.put("date", System.currentTimeMillis());
|
|
|
object.put("content", content);
|
|
|
return object.toJSONString();
|