|
@@ -29,6 +29,8 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.logging.log4j.util.Strings;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import reactor.util.function.Tuple2;
|
|
|
+import reactor.util.function.Tuples;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.Objects;
|
|
@@ -66,47 +68,24 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenMapper, UserToken
|
|
|
log.error("token验证失败 , 游戏拓展信息不存在, appId : {}, userId : {}", appId, userId);
|
|
|
return ResultVO.fail(TokenCheckEnum.PARAM_LACK.getMsg());
|
|
|
}
|
|
|
- //用户信息
|
|
|
- User user = userService.getById(userId);
|
|
|
- //查询token是否存在
|
|
|
- UserToken userToken = super.getOne(new LambdaQueryWrapper<UserToken>()
|
|
|
- .eq(UserToken::getToken, token)
|
|
|
- .eq(UserToken::getUserId, userId));
|
|
|
- //导量用户携带的是 relationUserId 匹配的token
|
|
|
- if (userToken == null && user.getRelationUserId() != null) {
|
|
|
- userToken = super.getOne(new LambdaQueryWrapper<UserToken>()
|
|
|
- .eq(UserToken::getToken, token)
|
|
|
- .eq(UserToken::getUserId, user.getRelationUserId()));
|
|
|
- }
|
|
|
+ //获取检测token
|
|
|
+ UserToken userToken = this.getCheckUserToken(userId, token);
|
|
|
//判断token是否存在, 并且没有过期
|
|
|
if (userToken == null || userToken.getExpireTime() < DateUtils.localDateTimeToSecond(LocalDateTime.now())) {
|
|
|
log.error("token验证失败 , token不存在或者已经失效, appId : {}, userId : {}, token : {}", appId, userId, token);
|
|
|
return ResultVO.fail(TokenCheckEnum.SIGN_ERROR.getMsg());
|
|
|
}
|
|
|
- //登录密钥
|
|
|
- String loginKey = gameExt.getLoginKey();
|
|
|
- //计算用户签名
|
|
|
- StringBuilder sb = new StringBuilder();
|
|
|
- sb.append("loginKey=").append(loginKey);
|
|
|
- sb.append("&appId=").append(appId);
|
|
|
- sb.append("&userId=").append(userId);
|
|
|
- sb.append("&token=").append(token);
|
|
|
- String mySign;
|
|
|
- try {
|
|
|
- mySign = SignUtil.MD5(sb.toString());
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("md5工具类加密异常, str : {}, e : {}", sb.toString(), e.getMessage());
|
|
|
- throw new BaseException("MD5加密异常");
|
|
|
- }
|
|
|
+ //获取计算签名
|
|
|
+ Tuple2<String, String> tuple2 = this.getMySign(gameExt, userId, token);
|
|
|
//签名错误
|
|
|
- if (!Objects.equals(mySign, sign)) {
|
|
|
- log.error("token验证失败 , str : {}, mySign : {}, sign : {}", sb.toString(), mySign, sign);
|
|
|
+ if (!Objects.equals(tuple2.getT2(), sign)) {
|
|
|
+ log.error("token验证失败 , str : {}, mySign : {}, sign : {}", tuple2.getT1(), tuple2.getT2(), sign);
|
|
|
return ResultVO.fail(TokenCheckEnum.CHECK_FAIL.getMsg());
|
|
|
}
|
|
|
//构造返回
|
|
|
return ResultVO.ok(CpTokenCheckVO.builder()
|
|
|
.userId(userId)
|
|
|
- .appId(gameExtService.getByGameId(user.getGameId()).getAppId())
|
|
|
+ .appId(gameExt.getAppId())
|
|
|
.build());
|
|
|
}
|
|
|
|
|
@@ -118,29 +97,28 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenMapper, UserToken
|
|
|
log.error("token验证失败 , 游戏拓展信息不存在, appId : {}, userId : {}", appId, userId);
|
|
|
return ResultVO.fail(TokenCheckEnum.PARAM_LACK.getMsg());
|
|
|
}
|
|
|
- //用户信息
|
|
|
- User user = userService.getById(userId);
|
|
|
- //查询token是否存在
|
|
|
- UserToken userToken = super.getOne(new LambdaQueryWrapper<UserToken>()
|
|
|
- .eq(UserToken::getToken, token)
|
|
|
- .eq(UserToken::getUserId, userId));
|
|
|
- //导量用户携带的是 relationUserId 匹配的token
|
|
|
- if (userToken == null && user.getRelationUserId() != null) {
|
|
|
- userToken = super.getOne(new LambdaQueryWrapper<UserToken>()
|
|
|
- .eq(UserToken::getToken, token)
|
|
|
- .eq(UserToken::getUserId, user.getRelationUserId()));
|
|
|
- }
|
|
|
+ //获取检测token
|
|
|
+ UserToken userToken = this.getCheckUserToken(userId, token);
|
|
|
//判断token是否存在, 并且没有过期
|
|
|
if (userToken == null || userToken.getExpireTime() < DateUtils.localDateTimeToSecond(LocalDateTime.now())) {
|
|
|
log.error("token验证失败 , token不存在或者已经失效, appId : {}, userId : {}, token : {}", appId, userId, token);
|
|
|
return ResultVO.fail(TokenCheckEnum.SIGN_ERROR.getMsg());
|
|
|
}
|
|
|
- //登录密钥
|
|
|
- String loginKey = gameExt.getLoginKey();
|
|
|
+ //获取计算签名
|
|
|
+ Tuple2<String, String> tuple2 = this.getMySign(gameExt, userId, token);
|
|
|
+ //签名错误
|
|
|
+ if (!Objects.equals(tuple2.getT2(), sign)) {
|
|
|
+ log.error("token验证失败 , str : {}, mySign : {}, sign : {}", tuple2.getT1(), tuple2.getT2(), sign);
|
|
|
+ return ResultVO.fail(TokenCheckEnum.CHECK_FAIL.getMsg());
|
|
|
+ }
|
|
|
+ return ResultVO.ok(userId);
|
|
|
+ }
|
|
|
+
|
|
|
+ private Tuple2<String, String> getMySign(GameExt gameExt, Long userId, String token) {
|
|
|
//计算用户签名
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
- sb.append("loginKey=").append(loginKey);
|
|
|
- sb.append("&appId=").append(appId);
|
|
|
+ sb.append("loginKey=").append(gameExt.getLoginKey());
|
|
|
+ sb.append("&appId=").append(gameExt.getAppId());
|
|
|
sb.append("&userId=").append(userId);
|
|
|
sb.append("&token=").append(token);
|
|
|
String mySign;
|
|
@@ -150,14 +128,26 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenMapper, UserToken
|
|
|
log.error("md5工具类加密异常, str : {}, e : {}", sb.toString(), e.getMessage());
|
|
|
throw new BaseException("MD5加密异常");
|
|
|
}
|
|
|
- //签名错误
|
|
|
- if (!Objects.equals(mySign, sign)) {
|
|
|
- log.error("token验证失败 , str : {}, mySign : {}, sign : {}", sb.toString(), mySign, sign);
|
|
|
- return ResultVO.fail(TokenCheckEnum.CHECK_FAIL.getMsg());
|
|
|
+ return Tuples.of(sb.toString(), mySign);
|
|
|
+ }
|
|
|
+
|
|
|
+ private UserToken getCheckUserToken(Long userId, String token) {
|
|
|
+ //用户信息
|
|
|
+ User user = userService.getById(userId);
|
|
|
+ //查询token是否存在
|
|
|
+ UserToken userToken = super.getOne(new LambdaQueryWrapper<UserToken>()
|
|
|
+ .eq(UserToken::getToken, token)
|
|
|
+ .eq(user.getRelationUserId() == null, UserToken::getUserId, userId));
|
|
|
+ //非导量玩家
|
|
|
+ if (Objects.equals(userToken.getUserId(), userId)) {
|
|
|
+ return userToken;
|
|
|
+ }
|
|
|
+ //导量玩家
|
|
|
+ User relationUser = userService.getById(userToken.getUserId());
|
|
|
+ if (Objects.equals(relationUser.getRelationUserId(), userId)) {
|
|
|
+ return userToken;
|
|
|
}
|
|
|
- ResultVO<Long> re = ResultVO.ok(userId);
|
|
|
- log.error("token验证成功, str : {}, mySign : {}, sign : {}, re : {}", sb.toString(), mySign, sign, JsonUtil.toString(re));
|
|
|
- return re;
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
@Override
|