Commit 56b41767 authored by 技术部-任文超's avatar 技术部-任文超

检查token是否有效

如果有效,延续生命期(延续后有效期24Hour)
parent 55e60a8f
...@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.controller.internal.user; ...@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.controller.internal.user;
import cn.quantgroup.tech.util.TechEnvironment; import cn.quantgroup.tech.util.TechEnvironment;
import cn.quantgroup.xyqb.Constants; import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.accessable.IpValidator;
import cn.quantgroup.xyqb.aspect.captcha.CaptchaFiniteValidator; import cn.quantgroup.xyqb.aspect.captcha.CaptchaFiniteValidator;
import cn.quantgroup.xyqb.aspect.lock.PasswordErrorFiniteValidator; import cn.quantgroup.xyqb.aspect.lock.PasswordErrorFiniteValidator;
import cn.quantgroup.xyqb.aspect.logcaller.LogHttpCaller; import cn.quantgroup.xyqb.aspect.logcaller.LogHttpCaller;
...@@ -9,13 +10,12 @@ import cn.quantgroup.xyqb.controller.IBaseController; ...@@ -9,13 +10,12 @@ import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.entity.Merchant; import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.User; import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail; import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.exception.UserNotExistException; import cn.quantgroup.xyqb.exception.UserNotExistException;
import cn.quantgroup.xyqb.exception.VerificationCodeErrorException; import cn.quantgroup.xyqb.exception.VerificationCodeErrorException;
import cn.quantgroup.xyqb.exception.WechatRelateUserException;
import cn.quantgroup.xyqb.model.JsonResult; import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.UserModel; import cn.quantgroup.xyqb.model.UserModel;
import cn.quantgroup.xyqb.model.UserStatistics; import cn.quantgroup.xyqb.model.UserStatistics;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.service.merchant.IMerchantService; import cn.quantgroup.xyqb.service.merchant.IMerchantService;
import cn.quantgroup.xyqb.service.register.IUserRegisterService; import cn.quantgroup.xyqb.service.register.IUserRegisterService;
import cn.quantgroup.xyqb.service.session.ISessionService; import cn.quantgroup.xyqb.service.session.ISessionService;
...@@ -24,17 +24,15 @@ import cn.quantgroup.xyqb.service.user.ILockIpv4Service; ...@@ -24,17 +24,15 @@ import cn.quantgroup.xyqb.service.user.ILockIpv4Service;
import cn.quantgroup.xyqb.service.user.IUserDetailService; import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserService; import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.service.wechat.IWechatService; import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import cn.quantgroup.xyqb.util.IPUtil; import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.MqUtils; import cn.quantgroup.xyqb.util.MqUtils;
import cn.quantgroup.xyqb.util.PasswordUtil; import cn.quantgroup.xyqb.util.PasswordUtil;
import cn.quantgroup.xyqb.util.ValidationUtil; import cn.quantgroup.xyqb.util.ValidationUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
...@@ -360,12 +358,14 @@ public class UserController implements IBaseController { ...@@ -360,12 +358,14 @@ public class UserController implements IBaseController {
} }
/** /**
* 检查token是否已经过期不存在了 * 检查token是否有效
* 如果有效,延续生命期(延续后有效期24Hour)
* *
* @param token * @param token - sid,session的id
* @return * @return
*/ */
@LogHttpCaller @LogHttpCaller
@IpValidator
@RequestMapping("/exists_token") @RequestMapping("/exists_token")
public JsonResult checkToken(@RequestParam String token) { public JsonResult checkToken(@RequestParam String token) {
if(StringUtils.isEmpty(token)){ if(StringUtils.isEmpty(token)){
...@@ -374,14 +374,32 @@ public class UserController implements IBaseController { ...@@ -374,14 +374,32 @@ public class UserController implements IBaseController {
if(token.contains("*")){ if(token.contains("*")){
return JsonResult.buildSuccessResult(null,false); return JsonResult.buildSuccessResult(null,false);
} }
String tokenKey = Constants.SESSION_PREFIX + token; String tokenKey = Constants.SESSION_PREFIX + token;
String tokenKey2 = Constants.Session.USER_SESSION_CACHE + token; String tokenKey2 = Constants.Session.USER_SESSION_CACHE + token;
return JsonResult.buildSuccessResult(null, stringRedisTemplate.hasKey(tokenKey)||stringRedisTemplate.hasKey(tokenKey2)); // 判断token是否存在
boolean exist = stringRedisTemplate.hasKey(tokenKey)||stringRedisTemplate.hasKey(tokenKey2);
/* 进一步判断session是否有效,有效时,自动续期 */
if(exist){
// 获取session信息
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis(token);
if(Objects.isNull(sessionStruct)) {
/* 如果没有获取到session信息则返回错误信息 */
return JsonResult.buildErrorStateResult("登录失败", null);
}else{
/* 延续session生命期 */
try {
sessionService.persistSession(sessionStruct.getSid(), sessionStruct.getValues());
} finally {
XyqbSessionContextHolder.releaseSession();
}
}
}
return JsonResult.buildSuccessResult(null, exist);
} }
@RequestMapping("/syncUserInfo") @RequestMapping("/syncUserInfo")
public JsonResult syncUserInfo() { public JsonResult syncUserInfo(HttpServletRequest request) {
log.error("[监控][UserController][syncUserInfo] request-Header:{}", JSON.toJSONString(getRequestHeaderMap(request)));
User user = getCurrentUserFromRedis(); User user = getCurrentUserFromRedis();
if (null == user) { if (null == user) {
return JsonResult.buildErrorStateResult(null, null); return JsonResult.buildErrorStateResult(null, null);
...@@ -497,70 +515,6 @@ public class UserController implements IBaseController { ...@@ -497,70 +515,6 @@ public class UserController implements IBaseController {
return false; return false;
} }
/**
* 绑定微信
* @param openId - 微信openId
* @return
*/
@LogHttpCaller
@RequestMapping("/associate_wechat")
public JsonResult associateWithWechat(String openId, HttpServletRequest request) {
User user = getCurrentUserFromRedis();
log.error("[UserController][associateWithWechat][非法请求]微信关联,user:{},openId:{},request-Header:{}",user, openId, JSON.toJSONString(getRequestHeaderMap(request)));
return JsonResult.buildSuccessResult("[非法请求]微信关联", null, 1L);
/*if(Objects.isNull(user) || Objects.isNull(user.getId())){
log.warn("微信关联失败,用户未登录:user:[{}],openId:[{}]",user,openId);
return JsonResult.buildErrorStateResult("请登陆后重新操作", null);
}
Long userId = user.getId();
*//* 判断用户是否已绑定其他微信 *//*
WechatUserInfo userInfoInDb = wechatService.queryByUserId(userId);
if (Objects.nonNull(userInfoInDb)) {
if(Objects.equals(openId, userInfoInDb.getOpenId())){
log.info("微信关联成功:重复关联:跳过:user:[{}],openId:[{}],wechatUserInfo:[{}]",user,openId,userInfoInDb);
return JsonResult.buildSuccessResult("微信关联成功", null);
}else if(StringUtils.isNotBlank(userInfoInDb.getOpenId())){
// 不做绑定
log.warn("微信关联失败,该用户已绑定其他微信:user:[{}],openId:[{}],wechatUserInfo:[{}]",user,openId,userInfoInDb);
return JsonResult.buildErrorStateResult("该用户已绑定其他微信", null);
}else{
// 清除无效微信信息
wechatService.forbiddenUserWeChat(userId);
}
}
*//* 执行绑定 *//*
WechatUserInfo userInfo = wechatService.findWechatUserInfoFromDb(openId);
log.info("微信关联:user:[{}],openId:[{}],wechatUserInfo:[{}]",user,openId,userInfo);
// 无微信信息
if (userInfo == null) {
log.warn("微信关联失败,缺少微信信息:user:[{}],openId:[{}],wechatUserInfo:[{}]",user,openId,userInfo);
return JsonResult.buildErrorStateResult("还没有保存微信信息", null);
}
// 排他性 - 先入为主
if (Objects.nonNull(userInfo.getUserId()) && userInfo.getUserId()>0 && !Objects.equals(userId, userInfo.getUserId())) {
log.warn("微信关联失败,该微信已经被其他用户绑定:user:[{}],openId:[{}],wechatUserInfo:[{}]",user,openId,userInfo);
return JsonResult.buildErrorStateResult("该微信已经被其他用户绑定", null);
}
*//*
* 未绑定信用钱包用户
*//*
try {
int rows = wechatService.relateUser(userId, user.getPhoneNo(), openId);
if(rows > 0){
log.info("微信关联成功:rows:{}, user:[{}],openId:[{}],wechatUserInfo:[{}]",rows,user,openId,userInfo);
return JsonResult.buildSuccessResult("微信关联成功", null);
}else {
log.warn("微信关联失败,保存遇到问题:rows:{}, user:[{}],openId:[{}],wechatUserInfo:[{}]",rows,user,openId,userInfo);
return JsonResult.buildErrorStateResult("微信关联失败", null);
}
} catch (Exception ex) {
// 不做绑定
log.warn("微信关联失败,保存遇到问题:user:[{}],openId:[{}],wechatUserInfo:[{}]",user,openId,userInfo, ex);
return JsonResult.buildErrorStateResult("微信关联失败", null);
}*/
}
/** /**
* 校验短信验证码 * 校验短信验证码
* @param phoneNo * @param phoneNo
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment