springboot升级为2.4.13、druid1.2.8、修改登录之后获取用户信息逻辑

This commit is contained in:
taozi
2021-11-27 16:39:45 +08:00
parent 0620e7ad2e
commit 047ae2bdd1
3 changed files with 57 additions and 71 deletions

View File

@ -25,6 +25,7 @@ import co.yixiang.modules.auth.param.*;
import co.yixiang.modules.services.AuthService;
import co.yixiang.modules.user.domain.YxUser;
import co.yixiang.modules.user.service.YxUserService;
import co.yixiang.utils.RedisUtil;
import co.yixiang.utils.RedisUtils;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.exceptions.ClientException;
@ -73,24 +74,24 @@ public class AuthController {
public ApiResult<Map<String, Object>> login(@Validated @RequestBody LoginParam loginParam,
HttpServletRequest request) {
YxUser yxUser = authService.wxappLogin(loginParam);
String token = JwtToken.makeToken(yxUser.getUid(),yxUser.getUsername());
String expiresTimeStr = JwtToken.getExpireTime(token);
YxUser yxUser = authService.wxappLogin(loginParam);
String token = JwtToken.makeToken(yxUser.getUid(), yxUser.getUsername());
String expiresTimeStr = JwtToken.getExpireTime(token);
// 返回 token
Map<String, Object> map = new LinkedHashMap<>(2);
// 返回 token
Map<String, Object> map = new LinkedHashMap<>(2);
map.put("token", token);
map.put("expires_time", expiresTimeStr);
map.put("token", token);
map.put("expires_time", expiresTimeStr);
// 保存在线信息
authService.save(yxUser, token, request);
if(singleLogin){
authService.checkLoginOnUser(yxUser.getUsername(),token);
}
// 保存在线信息
authService.save(yxUser, token, request);
if (singleLogin) {
authService.checkLoginOnUser(yxUser.getUsername(), token);
}
return ApiResult.ok(map).setMsg("登陆成功");
return ApiResult.ok(map).setMsg("登陆成功");
}
@ -106,9 +107,10 @@ public class AuthController {
@AuthCheck
@PostMapping("/wxapp/loginAuth")
@ApiOperation(value = "小程序获取用户信息", notes = "小程序获取用户信息")
public ApiResult<YxUser> loginAuth(@Validated @RequestBody LoginParam loginParam,
HttpServletRequest request) {
YxUser yxUser = authService.loginAuth(loginParam);
public ApiResult<YxUser> loginAuth(@Validated @RequestBody LoginParam loginParam) {
Long uid = LocalUser.getUidByToken();
String sessionKey = RedisUtil.get(ShopConstants.YSHOP_MINI_SESSION_KET+ uid).toString();
YxUser yxUser = authService.loginAuth(loginParam, uid, sessionKey);
return ApiResult.ok(yxUser).setMsg("获取成功");
}

View File

@ -76,66 +76,50 @@ public class AuthService {
* 小程序登陆
*
* @param loginParam loginParam
* @param uid
* @param sessionKey
* @return long
*/
@Transactional(rollbackFor = Exception.class)
public YxUser loginAuth(LoginParam loginParam) {
String code = loginParam.getCode();
public YxUser loginAuth(LoginParam loginParam,Long uid,String sessionKey) {
// String code = loginParam.getCode();
String encryptedData = loginParam.getEncryptedData();
String iv = loginParam.getIv();
String spread = loginParam.getSpread();
try {
//读取redis配置
String appId = redisUtils.getY(ShopKeyUtils.getWxAppAppId());
String secret = redisUtils.getY(ShopKeyUtils.getWxAppSecret());
if (StrUtil.isBlank(appId) || StrUtil.isBlank(secret)) {
throw new YshopException("请先配置小程序");
}
WxMaService wxMaService = WxMaConfiguration.getWxMaService();
WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);
WxMaUserInfo wxMpUser = wxMaService.getUserService().getUserInfo(session.getSessionKey(), encryptedData, iv);
YxUser yxUser = this.userService.getOne(Wrappers.<YxUser>lambdaQuery()
.eq(YxUser::getUid, LocalUser.getUser().getUid()), false);
if (ObjectUtil.isNotEmpty(yxUser)) {
//过滤掉表情
String ip = IpUtil.getRequestIp();
yxUser = YxUser.builder()
.nickname(wxMpUser.getNickName())
.avatar(wxMpUser.getAvatarUrl())
.addIp(ip)
.lastIp(ip)
.build();
//构建微信用户
WechatUserDto wechatUserDTO = WechatUserDto.builder()
.nickname(wxMpUser.getNickName())
.routineOpenid(session.getOpenid())
.unionId(session.getUnionid())
.sex(Integer.valueOf(wxMpUser.getGender()))
.language(wxMpUser.getLanguage())
.city(wxMpUser.getCity())
.province(wxMpUser.getProvince())
.country(wxMpUser.getCountry())
.headimgurl(wxMpUser.getAvatarUrl())
.build();
yxUser.setWxProfile(wechatUserDTO);
this.userService.update(yxUser,Wrappers.<YxUser>lambdaQuery()
.eq(YxUser::getUid, LocalUser.getUser().getUid()));
}
return yxUser;
} catch (WxErrorException e) {
e.printStackTrace();
log.error(e.getMessage());
throw new YshopException(e.toString());
//读取redis配置
String appId = redisUtils.getY(ShopKeyUtils.getWxAppAppId());
String secret = redisUtils.getY(ShopKeyUtils.getWxAppSecret());
if (StrUtil.isBlank(appId) || StrUtil.isBlank(secret)) {
throw new YshopException("请先配置小程序");
}
WxMaService wxMaService = WxMaConfiguration.getWxMaService();
//WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);
WxMaUserInfo wxMpUser = wxMaService.getUserService()
.getUserInfo(sessionKey, encryptedData, iv);
YxUser yxUser = userService.getById(uid);
//过滤掉表情
String ip = IpUtil.getRequestIp();
if(!StringUtils.isNotBlank(yxUser.getNickname())){
yxUser.setNickname(wxMpUser.getNickName());
yxUser.setAvatar(wxMpUser.getAvatarUrl());
}
yxUser.setLastIp(ip);
//构建微信用户
WechatUserDto wechatUserDTO = yxUser.getWxProfile();
wechatUserDTO.setNickname(wxMpUser.getNickName());
wechatUserDTO.setSex(Integer.valueOf(wxMpUser.getGender()));
wechatUserDTO.setLanguage(wxMpUser.getLanguage());
wechatUserDTO.setCity(wxMpUser.getCity());
wechatUserDTO.setProvince(wxMpUser.getProvince());
wechatUserDTO.setCountry(wxMpUser.getCountry());
wechatUserDTO.setHeadimgurl(wxMpUser.getAvatarUrl());
yxUser.setWxProfile(wechatUserDTO);
userService.updateById(yxUser);
userService.setSpread(spread, yxUser.getUid());
return yxUser;
}