Browse Source

feature-1.0-img: 添加微信小程序端鉴权登录方法

feature-1.0-img
‘‘ 3 years ago
parent
commit
9929538e51
  1. 10
      bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/RemoteImgService.java
  2. 7
      bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/factory/RemoteImgFallbackFactory.java
  3. 60
      bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/model/LoginWechatUser.java
  4. 49
      bnyer-auth/src/main/java/com/bnyer/auth/controller/WxUserController.java
  5. 26
      bnyer-auth/src/main/java/com/bnyer/auth/service/WxUserLoginService.java
  6. 10
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/utils/JwtUtils.java
  7. 45
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/WxUserLoginVo.java
  8. 101
      bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/service/WxUserTokenService.java
  9. 1
      bnyer-common/bnyer-common-security/src/main/resources/META-INF/spring.factories
  10. 4
      bnyer-gateway/src/main/java/com/bnyer/gateway/filter/AuthFilter.java
  11. 18
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/WxMiniController.java
  12. 13
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/WxUserService.java
  13. 82
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/WxUserServiceImpl.java

10
bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/RemoteImgService.java

@ -5,11 +5,13 @@ import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.dto.CreatorLoginDto; import com.bnyer.common.core.dto.CreatorLoginDto;
import com.bnyer.common.core.dto.FhLoginDto; import com.bnyer.common.core.dto.FhLoginDto;
import com.bnyer.common.core.dto.TiktokLoginDto; import com.bnyer.common.core.dto.TiktokLoginDto;
import com.bnyer.common.core.dto.WxLoginDto;
import com.bnyer.img.api.dto.TiktokImgMiniDto; import com.bnyer.img.api.dto.TiktokImgMiniDto;
import com.bnyer.img.api.factory.RemoteImgFallbackFactory; import com.bnyer.img.api.factory.RemoteImgFallbackFactory;
import com.bnyer.img.api.model.LoginCreator; import com.bnyer.img.api.model.LoginCreator;
import com.bnyer.img.api.model.LoginFhUser; import com.bnyer.img.api.model.LoginFhUser;
import com.bnyer.img.api.model.LoginTiktokUser; import com.bnyer.img.api.model.LoginTiktokUser;
import com.bnyer.img.api.model.LoginWechatUser;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -56,4 +58,12 @@ public interface RemoteImgService {
*/ */
@PostMapping(value = "/img/mini/tiktok/getTiktokUserInfo") @PostMapping(value = "/img/mini/tiktok/getTiktokUserInfo")
public R<LoginTiktokUser> getTiktokLoginUserByLoginParam(@Validated @RequestBody @ApiParam("登录对象") TiktokLoginDto dto); public R<LoginTiktokUser> getTiktokLoginUserByLoginParam(@Validated @RequestBody @ApiParam("登录对象") TiktokLoginDto dto);
/**
* 获取微信小程序用户信息
* @param dto 登录数据
* @return -
*/
@PostMapping(value = "/img/mini/wx/getWechatUserInfo")
R<LoginWechatUser> getWxLoginUserByLoginParam(@Validated @RequestBody @ApiParam("登录对象") WxLoginDto dto);
} }

7
bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/factory/RemoteImgFallbackFactory.java

@ -4,11 +4,13 @@ import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.dto.CreatorLoginDto; import com.bnyer.common.core.dto.CreatorLoginDto;
import com.bnyer.common.core.dto.FhLoginDto; import com.bnyer.common.core.dto.FhLoginDto;
import com.bnyer.common.core.dto.TiktokLoginDto; import com.bnyer.common.core.dto.TiktokLoginDto;
import com.bnyer.common.core.dto.WxLoginDto;
import com.bnyer.img.api.RemoteImgService; import com.bnyer.img.api.RemoteImgService;
import com.bnyer.img.api.dto.TiktokImgMiniDto; import com.bnyer.img.api.dto.TiktokImgMiniDto;
import com.bnyer.img.api.model.LoginCreator; import com.bnyer.img.api.model.LoginCreator;
import com.bnyer.img.api.model.LoginFhUser; import com.bnyer.img.api.model.LoginFhUser;
import com.bnyer.img.api.model.LoginTiktokUser; import com.bnyer.img.api.model.LoginTiktokUser;
import com.bnyer.img.api.model.LoginWechatUser;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.cloud.openfeign.FallbackFactory;
@ -49,6 +51,11 @@ public class RemoteImgFallbackFactory implements FallbackFactory<RemoteImgServic
public R<LoginTiktokUser> getTiktokLoginUserByLoginParam(TiktokLoginDto dto) { public R<LoginTiktokUser> getTiktokLoginUserByLoginParam(TiktokLoginDto dto) {
return R.fail("获取抖音小程序用户信息失败:" + throwable.getMessage()); return R.fail("获取抖音小程序用户信息失败:" + throwable.getMessage());
} }
@Override
public R<LoginWechatUser> getWxLoginUserByLoginParam(WxLoginDto dto) {
return R.fail("获取微信小程序用户信息失败:" + throwable.getMessage());
}
}; };
} }
} }

60
bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/model/LoginWechatUser.java

@ -0,0 +1,60 @@
package com.bnyer.img.api.model;
import com.bnyer.common.core.vo.WxUserLoginVo;
import lombok.Data;
import java.io.Serializable;
/**
* @author chengkun
* @date 2022/5/30 16:25
*/
/**
* 微信小程序用户信息
*/
@Data
public class LoginWechatUser implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 微信小程序用户唯一标识
*/
private String token;
/**
* 主键id
*/
private Long wxUserId;
/**
* 微信小程序用户开放Id
*/
private String wxUserOpenId;
/**
* 微信小程序用户昵称
*/
private String wxUserName;
/**
* 登录时间
*/
private Long loginTime;
/**
* 过期时间
*/
private Long expireTime;
/**
* 登录IP地址
*/
private String ipaddr;
/**
* 微信小程序用户信息
*/
private WxUserLoginVo wxUser;
}

49
bnyer-auth/src/main/java/com/bnyer/auth/controller/WxUserController.java

@ -0,0 +1,49 @@
package com.bnyer.auth.controller;
import com.bnyer.auth.service.WxUserLoginService;
import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.dto.WxLoginDto;
import com.bnyer.common.security.service.WxUserTokenService;
import com.bnyer.common.security.utils.SecurityUtils;
import com.bnyer.img.api.model.LoginWechatUser;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
/**
* 微信小程序token 控制
*
* @author penny
*/
@RestController
public class WxUserController
{
@Autowired
private WxUserLoginService wxUserLoginService;
@Autowired
private WxUserTokenService WxUserTokenService;
@ApiOperation(value="微信小程序用户登录")
@PostMapping(value = "/wxUserLogin")
public R<?> loginWx(@Validated @RequestBody @ApiParam("登录对象") WxLoginDto dto){
LoginWechatUser loginWxUser = wxUserLoginService.login(dto);
return R.ok(WxUserTokenService.createToken(loginWxUser));
}
@PostMapping("/wxUserLogout")
@ApiOperation("微信小程序用户注销")
public R<?> logout(HttpServletRequest request)
{
String token = SecurityUtils.getToken(request);
//删除微信用户缓存
WxUserTokenService.delLoginFhUser(token);
return R.ok();
}
}

26
bnyer-auth/src/main/java/com/bnyer/auth/service/WxUserLoginService.java

@ -0,0 +1,26 @@
package com.bnyer.auth.service;
import com.bnyer.common.core.dto.FhLoginDto;
import com.bnyer.common.core.dto.WxLoginDto;
import com.bnyer.img.api.RemoteImgService;
import com.bnyer.img.api.model.LoginFhUser;
import com.bnyer.img.api.model.LoginWechatUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 微信小程序端用户登录校验方法
*
* @author penny
*/
@Component
public class WxUserLoginService {
@Autowired
private RemoteImgService remoteImgService;
public LoginWechatUser login(WxLoginDto dto) {
return remoteImgService.getWxLoginUserByLoginParam(dto).getData();
}
}

10
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/utils/JwtUtils.java

@ -261,6 +261,16 @@ public class JwtUtils
return getValue(claims, SecurityConstants.DETAILS_WECHAT_USERNAME); return getValue(claims, SecurityConstants.DETAILS_WECHAT_USERNAME);
} }
/**
* 根据身份信息获取微信用户openid
*
* @param claims 身份信息
* @return -
*/
public static String getWechatUserOpenid(Claims claims)
{
return getValue(claims, SecurityConstants.DETAILS_WECHAT_OPENID);
}
//***************************微信用户信息结束************************************ //***************************微信用户信息结束************************************
//***************************快手用户信息开始************************************ //***************************快手用户信息开始************************************

45
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/WxUserLoginVo.java

@ -0,0 +1,45 @@
package com.bnyer.common.core.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
@Getter
@Setter
@ApiModel("微信小程序用户登录响应类")
public class WxUserLoginVo implements Serializable {
@ApiModelProperty(value="id")
private Long id;
@ApiModelProperty(value="用户昵称")
private String username;
@ApiModelProperty(value="微信id")
private String wxCode;
@ApiModelProperty(value="是否为vip(0->否;1->是)")
private String isVip;
@ApiModelProperty(value="头像img地址")
private String img;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value="创建时间")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value="更新时间")
private Date updateTime;
@ApiModelProperty(value="排序")
private Integer sort;
private static final long serialVersionUID = 1L;
}

101
bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/service/WxUserTokenService.java

@ -0,0 +1,101 @@
package com.bnyer.common.security.service;
import com.bnyer.common.core.constant.CacheConstants;
import com.bnyer.common.core.constant.RedisKeyConstant;
import com.bnyer.common.core.constant.SecurityConstants;
import com.bnyer.common.core.utils.JwtUtils;
import com.bnyer.common.core.utils.ServletUtils;
import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.common.core.utils.ip.IpUtils;
import com.bnyer.common.core.utils.uuid.IdUtils;
import com.bnyer.common.redis.service.RedisService;
import com.bnyer.img.api.model.LoginFhUser;
import com.bnyer.img.api.model.LoginWechatUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* 微信端小程序token验证处理
*
* @author penny
*/
@Component
public class WxUserTokenService
{
@Autowired
private RedisService redisService;
protected static final long MILLIS_SECOND = 1000;
protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND;
private final static long expireTime = CacheConstants.EXPIRATION;
private final static String ACCESS_TOKEN = RedisKeyConstant.WECHAT_USER_LOGIN_KEY;
/**
* 创建令牌
*/
public Map<String, Object> createToken(LoginWechatUser loginWechatUser)
{
String token = IdUtils.fastUUID();
Long wxUserId = loginWechatUser.getWxUser().getId();
String wxUserName = loginWechatUser.getWxUser().getUsername();
String openId = loginWechatUser.getWxUser().getWxCode();
loginWechatUser.setToken(token);
loginWechatUser.setWxUserId(wxUserId);
loginWechatUser.setWxUserName(wxUserName);
loginWechatUser.setWxUserOpenId(openId);
loginWechatUser.setIpaddr(IpUtils.getIpAddr(ServletUtils.getRequest()));
refreshToken(loginWechatUser);
// Jwt存储信息
Map<String, Object> claimsMap = new HashMap<String, Object>();
claimsMap.put(SecurityConstants.WECHAT_USER_KEY, token);
claimsMap.put(SecurityConstants.DETAILS_WECHAT_USER_ID, wxUserId);
claimsMap.put(SecurityConstants.DETAILS_WECHAT_USERNAME, wxUserName);
claimsMap.put(SecurityConstants.DETAILS_WECHAT_OPENID,openId);
// 接口返回信息
Map<String, Object> rspMap = new HashMap<String, Object>();
rspMap.put("access_token", JwtUtils.createToken(claimsMap));
rspMap.put("userInfo",loginWechatUser.getWxUser());
rspMap.put("expires_in", expireTime);
return rspMap;
}
/**
* 删除微信小程序用户缓存信息
*/
public void delLoginFhUser(String token)
{
if (StringUtils.isNotEmpty(token))
{
String wxUserKey = JwtUtils.getWechatUserKey(token);
redisService.deleteObject(getTokenKey(wxUserKey));
}
}
/**
* 刷新令牌有效期
*
* @param loginWechatUser 微信小程序用户登录信息
*/
public void refreshToken(LoginWechatUser loginWechatUser)
{
loginWechatUser.setLoginTime(System.currentTimeMillis());
loginWechatUser.setExpireTime(loginWechatUser.getLoginTime() + expireTime * MILLIS_MINUTE);
// 根据uuid将loginWechatUser缓存
String fhUserKey = getTokenKey(loginWechatUser.getToken());
redisService.setCacheObject(fhUserKey, loginWechatUser, expireTime, TimeUnit.MINUTES);
}
private String getTokenKey(String token)
{
return ACCESS_TOKEN + token;
}
}

1
bnyer-common/bnyer-common-security/src/main/resources/META-INF/spring.factories

@ -4,6 +4,7 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.bnyer.common.security.service.CreatorTokenService,\ com.bnyer.common.security.service.CreatorTokenService,\
com.bnyer.common.security.service.FhUserTokenService,\ com.bnyer.common.security.service.FhUserTokenService,\
com.bnyer.common.security.service.TiktokUserTokenService,\ com.bnyer.common.security.service.TiktokUserTokenService,\
com.bnyer.common.security.service.WxUserTokenService,\
com.bnyer.common.security.aspect.PreAuthorizeAspect,\ com.bnyer.common.security.aspect.PreAuthorizeAspect,\
com.bnyer.common.security.aspect.InnerAuthAspect,\ com.bnyer.common.security.aspect.InnerAuthAspect,\
com.bnyer.common.security.handler.GlobalExceptionHandler com.bnyer.common.security.handler.GlobalExceptionHandler

4
bnyer-gateway/src/main/java/com/bnyer/gateway/filter/AuthFilter.java

@ -152,7 +152,8 @@ public class AuthFilter implements GlobalFilter, Ordered
} }
String wechatUserId = JwtUtils.getWechatUserId(claims); String wechatUserId = JwtUtils.getWechatUserId(claims);
String wechatUserName = JwtUtils.getWechatUserName(claims); String wechatUserName = JwtUtils.getWechatUserName(claims);
if (StringUtils.isEmpty(wechatUserId) || StringUtils.isEmpty(wechatUserName)) String openId = JwtUtils.getWechatUserOpenid(claims);
if (StringUtils.isEmpty(wechatUserId) || StringUtils.isEmpty(wechatUserName) || StringUtils.isEmpty(openId))
{ {
return unauthorizedResponse(exchange, "令牌验证失败"); return unauthorizedResponse(exchange, "令牌验证失败");
} }
@ -160,6 +161,7 @@ public class AuthFilter implements GlobalFilter, Ordered
addHeader(mutate, SecurityConstants.WECHAT_USER_KEY, wechatUserKey); addHeader(mutate, SecurityConstants.WECHAT_USER_KEY, wechatUserKey);
addHeader(mutate, SecurityConstants.DETAILS_WECHAT_USER_ID, wechatUserId); addHeader(mutate, SecurityConstants.DETAILS_WECHAT_USER_ID, wechatUserId);
addHeader(mutate, SecurityConstants.DETAILS_WECHAT_USERNAME, wechatUserName); addHeader(mutate, SecurityConstants.DETAILS_WECHAT_USERNAME, wechatUserName);
addHeader(mutate,SecurityConstants.DETAILS_WECHAT_OPENID,openId);
// 内部请求来源参数清除 // 内部请求来源参数清除
removeHeader(mutate, SecurityConstants.FROM_SOURCE); removeHeader(mutate, SecurityConstants.FROM_SOURCE);
return chain.filter(exchange.mutate().request(mutate.build()).build()); return chain.filter(exchange.mutate().request(mutate.build()).build());

18
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/WxMiniController.java

@ -4,11 +4,13 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.bnyer.common.core.constant.TiktokConstant; import com.bnyer.common.core.constant.TiktokConstant;
import com.bnyer.common.core.domain.Feedback; import com.bnyer.common.core.domain.Feedback;
import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.dto.*; import com.bnyer.common.core.dto.*;
import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.web.controller.BaseController; import com.bnyer.common.core.web.controller.BaseController;
import com.bnyer.common.core.web.domain.AjaxResult; import com.bnyer.common.core.web.domain.AjaxResult;
import com.bnyer.common.core.web.page.TableDataInfo; import com.bnyer.common.core.web.page.TableDataInfo;
import com.bnyer.img.api.model.LoginWechatUser;
import com.bnyer.img.service.*; import com.bnyer.img.service.*;
import com.bnyer.img.vo.CreatorDetailsVo; import com.bnyer.img.vo.CreatorDetailsVo;
import com.bnyer.img.vo.CreatorFollowVo; import com.bnyer.img.vo.CreatorFollowVo;
@ -203,11 +205,17 @@ public class WxMiniController extends BaseController {
return AjaxResult.success(tiktokLikeService.judgeLike(dto.getUserId(),dto.getImgId(),"2")); return AjaxResult.success(tiktokLikeService.judgeLike(dto.getUserId(),dto.getImgId(),"2"));
} }
@ApiOperation(value="用户登录") // @ApiOperation(value="用户登录")
@PostMapping(value = "/loginWx") // @PostMapping(value = "/loginWx")
public AjaxResult loginWx(@Validated @RequestBody @ApiParam("登录对象") WxLoginDto dto){ // public AjaxResult loginWx(@Validated @RequestBody @ApiParam("登录对象") WxLoginDto dto){
log.info("【微信图文小程序】用户【{}】授权登录了", dto.getCode()); // log.info("【微信图文小程序】用户【{}】授权登录了", dto.getCode());
return AjaxResult.success(wxUserService.login(dto)); // return AjaxResult.success(wxUserService.login(dto));
// }
@ApiOperation(value="获取微信小程序用户")
@PostMapping(value = "/getWechatUserInfo")
public R<LoginWechatUser> getWxLoginUserByLoginParam(@Validated @RequestBody @ApiParam("登录对象") WxLoginDto dto){
return wxUserService.getWxLoginUserByLoginParam(dto);
} }
//@TokenCheck //@TokenCheck

13
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/WxUserService.java

@ -1,8 +1,8 @@
package com.bnyer.img.service; package com.bnyer.img.service;
import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.dto.WxLoginDto; import com.bnyer.common.core.dto.WxLoginDto;
import com.bnyer.img.api.model.LoginWechatUser;
import java.util.Map;
public interface WxUserService { public interface WxUserService {
@ -11,7 +11,7 @@ public interface WxUserService {
* @param param 登录参数 * @param param 登录参数
* @return - * @return -
*/ */
Map<String,Object> login(WxLoginDto param); //Map<String,Object> login(WxLoginDto param);
/** /**
* 检查某平台用户当日下载次数是否超标 * 检查某平台用户当日下载次数是否超标
@ -21,4 +21,11 @@ public interface WxUserService {
* @return - * @return -
*/ */
boolean checkUserCanDownload(Long userId,String platform,String appType); boolean checkUserCanDownload(Long userId,String platform,String appType);
/**
* 获取微信小程序用户
* @param dto 登录参数
* @return -
*/
R<LoginWechatUser> getWxLoginUserByLoginParam(WxLoginDto dto);
} }

82
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/WxUserServiceImpl.java

@ -4,19 +4,22 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.bnyer.common.core.constant.RedisKeyConstant; import com.bnyer.common.core.constant.RedisKeyConstant;
import com.bnyer.common.core.constant.TiktokConstant; import com.bnyer.common.core.constant.TiktokConstant;
import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.domain.WxUser; import com.bnyer.common.core.domain.WxUser;
import com.bnyer.common.core.dto.WxLoginDto; import com.bnyer.common.core.dto.WxLoginDto;
import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.Sm4Util; import com.bnyer.common.core.utils.Sm4Util;
import com.bnyer.common.core.utils.StringUtils; import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.common.core.utils.uuid.IdUtils; import com.bnyer.common.core.vo.WxUserLoginVo;
import com.bnyer.common.redis.service.RedisService; import com.bnyer.common.redis.service.RedisService;
import com.bnyer.img.api.model.LoginWechatUser;
import com.bnyer.img.config.WxConfig; import com.bnyer.img.config.WxConfig;
import com.bnyer.img.mapper.WxUserMapper; import com.bnyer.img.mapper.WxUserMapper;
import com.bnyer.img.service.WxUserService; import com.bnyer.img.service.WxUserService;
import com.bnyer.img.vo.WxSessionInfoVo; import com.bnyer.img.vo.WxSessionInfoVo;
import com.bnyer.img.vo.WxUserInfoVo; import com.bnyer.img.vo.WxUserInfoVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
@ -27,9 +30,6 @@ import javax.crypto.spec.SecretKeySpec;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Base64; import java.util.Base64;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Service @Service
@Slf4j @Slf4j
@ -122,34 +122,34 @@ public class WxUserServiceImpl implements WxUserService {
return wxUser; return wxUser;
} }
@Override // @Override
public Map<String, Object> login(WxLoginDto dto) { // public Map<String, Object> login(WxLoginDto dto) {
WxSessionInfoVo sessionInfo = this.getSessionInfo(dto.getCode()); // WxSessionInfoVo sessionInfo = this.getSessionInfo(dto.getCode());
//检查数据库中是否存在该openId,存在则直接设置会话状态登录;不存在则新增 // //检查数据库中是否存在该openId,存在则直接设置会话状态登录;不存在则新增
LambdaQueryWrapper<WxUser> wrapper = new LambdaQueryWrapper<>(); // LambdaQueryWrapper<WxUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(sessionInfo.getOpenId() != null, WxUser::getWxCode, Sm4Util.sm4Encryption(sessionInfo.getOpenId())); // wrapper.eq(sessionInfo.getOpenId() != null, WxUser::getWxCode, Sm4Util.sm4Encryption(sessionInfo.getOpenId()));
WxUser wxUser = wxUserMapper.selectOne(wrapper); // WxUser wxUser = wxUserMapper.selectOne(wrapper);
if (wxUser == null) { // if (wxUser == null) {
//新用户,新增 // //新用户,新增
wxUser = this.saveUserInfo(sessionInfo.getOpenId(), sessionInfo.getSessionKey(), dto.getEncryptedData(), dto.getIv()); // wxUser = this.saveUserInfo(sessionInfo.getOpenId(), sessionInfo.getSessionKey(), dto.getEncryptedData(), dto.getIv());
} // }
//设置会话状态 // //设置会话状态
String redisKey = RedisKeyConstant.WECHAT_USER_LOGIN_KEY + Sm4Util.sm4Encryption(sessionInfo.getOpenId()); // String redisKey = RedisKeyConstant.WECHAT_USER_LOGIN_KEY + Sm4Util.sm4Encryption(sessionInfo.getOpenId());
//存在该登录态则删除刷新 // //存在该登录态则删除刷新
if (redisService.hasKey(redisKey)) { // if (redisService.hasKey(redisKey)) {
redisService.deleteObject(redisKey); // redisService.deleteObject(redisKey);
} // }
StringBuffer sb = new StringBuffer(); // StringBuffer sb = new StringBuffer();
String randomId = IdUtils.fastSimpleUUID(); // String randomId = IdUtils.fastSimpleUUID();
sb.append(randomId).append("#").append(sessionInfo.getOpenId()); // sb.append(randomId).append("#").append(sessionInfo.getOpenId());
//设置登录会话 // //设置登录会话
Map<String, Object> map = new HashMap<>(2); // Map<String, Object> map = new HashMap<>(2);
map.put("token", sb.toString()); // map.put("token", sb.toString());
map.put("sessionKey", sessionInfo.getSessionKey()); // map.put("sessionKey", sessionInfo.getSessionKey());
map.put("userInfo", wxUser); // map.put("userInfo", wxUser);
redisService.setCacheObject(redisKey, map, 30L, TimeUnit.DAYS); // redisService.setCacheObject(redisKey, map, 30L, TimeUnit.DAYS);
return map; // return map;
} // }
@Override @Override
public boolean checkUserCanDownload(Long userId, String platform, String appType) { public boolean checkUserCanDownload(Long userId, String platform, String appType) {
@ -170,4 +170,22 @@ public class WxUserServiceImpl implements WxUserService {
return false; return false;
} }
} }
@Override
public R<LoginWechatUser> getWxLoginUserByLoginParam(WxLoginDto dto) {
WxSessionInfoVo sessionInfo = this.getSessionInfo(dto.getCode());
//检查数据库中是否存在该openId,存在则直接返回结果;不存在则新增
LambdaQueryWrapper<WxUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(sessionInfo.getOpenId() != null, WxUser::getWxCode, Sm4Util.sm4Encryption(sessionInfo.getOpenId()));
WxUser wxUser = wxUserMapper.selectOne(wrapper);
if (wxUser == null) {
//新用户,新增
wxUser = this.saveUserInfo(sessionInfo.getOpenId(), sessionInfo.getSessionKey(), dto.getEncryptedData(), dto.getIv());
}
LoginWechatUser loginWxUser = new LoginWechatUser();
WxUserLoginVo loginVo = new WxUserLoginVo();
BeanUtils.copyProperties(wxUser,loginVo);
loginWxUser.setWxUser(loginVo);
return R.ok(loginWxUser);
}
} }

Loading…
Cancel
Save