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

检查token是否有效

如果有效,延续生命期(延续后有效期24Hour)
parent 55e60a8f
......@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.controller.internal.user;
import cn.quantgroup.tech.util.TechEnvironment;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.accessable.IpValidator;
import cn.quantgroup.xyqb.aspect.captcha.CaptchaFiniteValidator;
import cn.quantgroup.xyqb.aspect.lock.PasswordErrorFiniteValidator;
import cn.quantgroup.xyqb.aspect.logcaller.LogHttpCaller;
......@@ -9,13 +10,12 @@ import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.exception.UserNotExistException;
import cn.quantgroup.xyqb.exception.VerificationCodeErrorException;
import cn.quantgroup.xyqb.exception.WechatRelateUserException;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.UserModel;
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.register.IUserRegisterService;
import cn.quantgroup.xyqb.service.session.ISessionService;
......@@ -24,17 +24,15 @@ import cn.quantgroup.xyqb.service.user.ILockIpv4Service;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.MqUtils;
import cn.quantgroup.xyqb.util.PasswordUtil;
import cn.quantgroup.xyqb.util.ValidationUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
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.Qualifier;
import org.springframework.data.redis.core.RedisTemplate;
......@@ -360,12 +358,14 @@ public class UserController implements IBaseController {
}
/**
* 检查token是否已经过期不存在了
* 检查token是否有效
* 如果有效,延续生命期(延续后有效期24Hour)
*
* @param token
* @param token - sid,session的id
* @return
*/
@LogHttpCaller
@IpValidator
@RequestMapping("/exists_token")
public JsonResult checkToken(@RequestParam String token) {
if(StringUtils.isEmpty(token)){
......@@ -374,14 +374,32 @@ public class UserController implements IBaseController {
if(token.contains("*")){
return JsonResult.buildSuccessResult(null,false);
}
String tokenKey = Constants.SESSION_PREFIX + 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")
public JsonResult syncUserInfo() {
public JsonResult syncUserInfo(HttpServletRequest request) {
log.error("[监控][UserController][syncUserInfo] request-Header:{}", JSON.toJSONString(getRequestHeaderMap(request)));
User user = getCurrentUserFromRedis();
if (null == user) {
return JsonResult.buildErrorStateResult(null, null);
......@@ -497,70 +515,6 @@ public class UserController implements IBaseController {
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
......
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