fix:登录接口返回值修改

feat:新增refresh登录;新增登出接口
This commit is contained in:
wangff
2025-09-05 14:53:32 +08:00
parent d7b9f20f1f
commit 514af329ac
15 changed files with 200 additions and 20 deletions

View File

@@ -1,5 +1,8 @@
package com.cool.store.service;
import com.cool.store.userholder.CurrentUser;
import com.cool.store.userholder.RefreshUser;
/**
* @Author suzhuhong
* @Date 2025/5/29 16:34
@@ -13,7 +16,10 @@ public interface EnterpriseService {
* @param mobile
* @return
*/
String getAccessToken(String mobile);
CurrentUser getLoginInfo(String mobile);
/**
* 获取并缓存refreshToken
*/
RefreshUser getRefreshUser(String userId, String mobile);
}

View File

@@ -12,8 +12,10 @@ import com.cool.store.exception.ServiceException;
import com.cool.store.mapper.SysRoleMapper;
import com.cool.store.service.EnterpriseService;
import com.cool.store.userholder.CurrentUser;
import com.cool.store.userholder.RefreshUser;
import com.cool.store.utils.RedisUtilPool;
import com.cool.store.utils.poi.DateUtils;
import com.cool.store.utils.poi.constant.Constants;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.crypto.RandomNumberGenerator;
@@ -48,7 +50,7 @@ public class EnterpriseServiceImpl implements EnterpriseService {
private String eid;
@Override
public String getAccessToken(String mobile) {
public CurrentUser getLoginInfo(String mobile) {
CurrentUser currentUser = new CurrentUser();
EnterpriseUserDO enterpriseUser = enterpriseUserDAO.selectByMobile(mobile);
if (Objects.isNull(enterpriseUser)){
@@ -107,8 +109,20 @@ public class EnterpriseServiceImpl implements EnterpriseService {
currentUser.setAppType("qw_self_dkf");
currentUser.setUnionid(enterpriseUser.getUnionid());
currentUser.setUserType(enterpriseUser.getUserType());
redisUtilPool.setString(RedisConstant.ACCESS_TOKEN_PREFIX + currentUser.getAccessToken(), JSON.toJSONString(currentUser), 24 * 60 * 60);
return currentUser.getAccessToken();
redisUtilPool.setString(RedisConstant.ACCESS_TOKEN_PREFIX + currentUser.getAccessToken(), JSON.toJSONString(currentUser), Constants.ACTION_TOKEN_EXPIRE);
return currentUser;
}
@Override
public RefreshUser getRefreshUser(String userId, String mobile) {
if (StringUtils.isBlank(mobile)) {
EnterpriseUserDO userInfo = enterpriseUserDAO.getUserInfoById(userId);
mobile = userInfo.getMobile();
}
String refreshToken = getToken();
RefreshUser refreshUser = new RefreshUser(userId, refreshToken, mobile);
redisUtilPool.setString(RedisConstant.REFRESH_TOKEN_PREFIX + refreshToken, JSON.toJSONString(refreshUser), Constants.REFRESH_TOKEN_EXPIRE);
return refreshUser;
}
public static void main(String[] args) {

View File

@@ -1,18 +1,27 @@
package com.cool.store.service.login;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.constants.RedisConstant;
import com.cool.store.context.CurrentUserHolder;
import com.cool.store.context.LoginUserInfo;
import com.cool.store.dao.EnterpriseUserDAO;
import com.cool.store.dto.login.UserLoginDTO;
import com.cool.store.dto.login.UserRefreshLoginDTO;
import com.cool.store.entity.EnterpriseUserDO;
import com.cool.store.entity.login.UserLoginDO;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.EnterpriseService;
import com.cool.store.userholder.CurrentUser;
import com.cool.store.userholder.RefreshUser;
import com.cool.store.utils.RedisUtilPool;
import com.cool.store.utils.poi.constant.Constants;
import com.cool.store.vo.login.UserBaseInfoVO;
import com.cool.store.vo.login.UserLoginVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.MessageFormat;
@@ -27,6 +36,7 @@ import java.time.LocalDate;
* @since 2025/9/3
*/
@Slf4j
@Service
public abstract class LoginBaseService implements LoginStrategy {
@Resource
private RedisUtilPool redisUtilPool;
@@ -56,13 +66,40 @@ public abstract class LoginBaseService implements LoginStrategy {
return userLogin(param, userLoginDO);
}
@Override
public ResponseResult refreshLogin(UserRefreshLoginDTO param) {
String refreshTokenKey = RedisConstant.REFRESH_TOKEN_PREFIX + param.getRefreshToken();
String refreshUserStr = redisUtilPool.getString(refreshTokenKey);
if (StringUtils.isBlank(refreshUserStr)) {
return ResponseResult.fail(ErrorCodeEnum.REFRESH_TOKEN_INVALID);
}
RefreshUser refreshUser = JSONObject.parseObject(refreshUserStr, RefreshUser.class);
if (StringUtils.isBlank(refreshUser.getMobile())) {
return ResponseResult.fail(ErrorCodeEnum.REFRESH_TOKEN_INVALID);
}
UserLoginDO userLoginDO = new UserLoginDO(refreshUser.getUserId(), refreshUser.getMobile(), null);
return ResponseResult.success(getUserLoginInfo(userLoginDO));
}
@Override
public ResponseResult logout() {
LoginUserInfo currentUser = CurrentUserHolder.getUser();
String accessToken = currentUser.getAccessToken();
String key = RedisConstant.ACCESS_TOKEN_PREFIX + accessToken;
redisUtilPool.delKey(key);
return ResponseResult.success();
}
/**
* 获取登录accessToken
*
* @param userLoginDO 用户登录信息
* @return accessToken
*/
public String getAccessToken(UserLoginDO userLoginDO) {
return enterpriseService.getAccessToken(userLoginDO.getMobile());
public UserLoginVO getUserLoginInfo(UserLoginDO userLoginDO) {
CurrentUser currentUser = enterpriseService.getLoginInfo(userLoginDO.getMobile());
UserBaseInfoVO userBAseInfoVO = BeanUtil.toBean(currentUser, UserBaseInfoVO.class);
RefreshUser refreshUser = enterpriseService.getRefreshUser(userLoginDO.getUserId(), userLoginDO.getMobile());
return new UserLoginVO(currentUser.getAccessToken(), refreshUser.getRefreshToken(), Constants.ACTION_TOKEN_EXPIRE, userBAseInfoVO);
}
}

View File

@@ -1,6 +1,7 @@
package com.cool.store.service.login;
import com.cool.store.dto.login.UserLoginDTO;
import com.cool.store.dto.login.UserRefreshLoginDTO;
import com.cool.store.response.ResponseResult;
/**
@@ -14,8 +15,16 @@ import com.cool.store.response.ResponseResult;
public interface LoginStrategy {
/**
* 登录基础方法
* @param param
* @return
*/
ResponseResult login(UserLoginDTO param);
/**
* refreshToken登录
*/
ResponseResult refreshLogin(UserRefreshLoginDTO param);
/**
* 登出
*/
ResponseResult logout();
}

View File

@@ -49,6 +49,6 @@ public class PasswordLoginServiceImpl extends LoginBaseService {
}
return ResponseResult.fail(ErrorCodeEnum.PASSWORD_ERROR_MULTI, errorNum.toString());
}
return ResponseResult.success(getAccessToken(userLoginDO));
return ResponseResult.success(getUserLoginInfo(userLoginDO));
}
}

View File

@@ -229,4 +229,14 @@ public class Constants
* 用户密码
*/
public static final String USER_AUTH_KEY = "user_auth_key";
/**
* accessToken有效期单位秒
*/
public static final int ACTION_TOKEN_EXPIRE = 24 * 60 * 60;
/**
* refreshToken有效期单位秒
*/
public static final int REFRESH_TOKEN_EXPIRE = 30 * 24 * 60 * 60;
}