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

@ -28,7 +28,7 @@
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.12</version> <version>2.4.13</version>
</parent> </parent>
<properties> <properties>
@ -38,7 +38,7 @@
<jedis.version>3.3.0</jedis.version> <jedis.version>3.3.0</jedis.version>
<swagger.version>3.0.0</swagger.version> <swagger.version>3.0.0</swagger.version>
<fastjson.version>1.2.78</fastjson.version> <fastjson.version>1.2.78</fastjson.version>
<druid.version>1.2.6</druid.version> <druid.version>1.2.8</druid.version>
<hutool.version>5.5.7</hutool.version> <hutool.version>5.5.7</hutool.version>
<poi.version>4.1.2</poi.version> <poi.version>4.1.2</poi.version>
<commons-pool2.version>2.5.0</commons-pool2.version> <commons-pool2.version>2.5.0</commons-pool2.version>

View File

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

View File

@ -76,66 +76,50 @@ public class AuthService {
* 小程序登陆 * 小程序登陆
* *
* @param loginParam loginParam * @param loginParam loginParam
* @param uid
* @param sessionKey
* @return long * @return long
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public YxUser loginAuth(LoginParam loginParam) { public YxUser loginAuth(LoginParam loginParam,Long uid,String sessionKey) {
String code = loginParam.getCode(); // String code = loginParam.getCode();
String encryptedData = loginParam.getEncryptedData(); String encryptedData = loginParam.getEncryptedData();
String iv = loginParam.getIv(); String iv = loginParam.getIv();
String spread = loginParam.getSpread(); String spread = loginParam.getSpread();
try { //读取redis配置
//读取redis配置 String appId = redisUtils.getY(ShopKeyUtils.getWxAppAppId());
String appId = redisUtils.getY(ShopKeyUtils.getWxAppAppId()); String secret = redisUtils.getY(ShopKeyUtils.getWxAppSecret());
String secret = redisUtils.getY(ShopKeyUtils.getWxAppSecret()); if (StrUtil.isBlank(appId) || StrUtil.isBlank(secret)) {
if (StrUtil.isBlank(appId) || StrUtil.isBlank(secret)) { throw new YshopException("请先配置小程序");
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());
} }
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;
} }