Browse Source

feature-img-1.0:添加登录鉴权

feature-1.0-img
Penny 3 years ago
parent
commit
c04e8ceb3f
  1. 30
      bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/RemoteImgService.java
  2. 21
      bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/factory/RemoteImgFallbackFactory.java
  3. 57
      bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/model/LoginCreator.java
  4. 60
      bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/model/LoginFhUser.java
  5. 60
      bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/model/LoginTiktokUser.java
  6. 51
      bnyer-auth/src/main/java/com/bnyer/auth/controller/CreatorController.java
  7. 49
      bnyer-auth/src/main/java/com/bnyer/auth/controller/FhUserController.java
  8. 49
      bnyer-auth/src/main/java/com/bnyer/auth/controller/TiktokUserController.java
  9. 37
      bnyer-auth/src/main/java/com/bnyer/auth/service/CreatorLoginService.java
  10. 24
      bnyer-auth/src/main/java/com/bnyer/auth/service/FhUserLoginService.java
  11. 24
      bnyer-auth/src/main/java/com/bnyer/auth/service/TiktokUserLoginService.java
  12. 18
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/annotation/TokenCheck.java
  13. 28
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/CacheConstants.java
  14. 8
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/RedisKeyConstant.java
  15. 92
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/SecurityConstants.java
  16. 24
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/TokenConstants.java
  17. 237
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/utils/JwtUtils.java
  18. 2
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/CreatorLoginVo.java
  19. 45
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/FhUserLoginVo.java
  20. 45
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/TiktokUserLoginVo.java
  21. 9
      bnyer-common/bnyer-common-security/pom.xml
  22. 3
      bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/config/WebMvcConfig.java
  23. 97
      bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/service/CreatorTokenService.java
  24. 100
      bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/service/FhUserTokenService.java
  25. 100
      bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/service/TiktokUserTokenService.java
  26. 3
      bnyer-common/bnyer-common-security/src/main/resources/META-INF/spring.factories
  27. 261
      bnyer-gateway/src/main/java/com/bnyer/gateway/filter/AuthFilter.java
  28. 36
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java
  29. 19
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/FhMiniController.java
  30. 18
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/TiktokMiniController.java
  31. 21
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorService.java
  32. 13
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/FhUserService.java
  33. 23
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/TiktokUserService.java
  34. 126
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java
  35. 84
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/FhUserServiceImpl.java
  36. 82
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokUserServiceImpl.java

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

@ -2,8 +2,14 @@ package com.bnyer.img.api;
import com.bnyer.common.core.constant.ServiceNameConstants; import com.bnyer.common.core.constant.ServiceNameConstants;
import com.bnyer.common.core.domain.R; import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.dto.CreatorLoginDto;
import com.bnyer.common.core.dto.FhLoginDto;
import com.bnyer.common.core.dto.TiktokLoginDto;
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.LoginFhUser;
import com.bnyer.img.api.model.LoginTiktokUser;
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;
@ -26,4 +32,28 @@ public interface RemoteImgService {
*/ */
@PostMapping(value = "/img/mini/creator/insertTiktokImg") @PostMapping(value = "/img/mini/creator/insertTiktokImg")
public R<Integer> insertTiktokImg(@Validated @RequestBody @ApiParam("TiktokImg对象") TiktokImgMiniDto dto); public R<Integer> insertTiktokImg(@Validated @RequestBody @ApiParam("TiktokImg对象") TiktokImgMiniDto dto);
/**
* 获取艺术家信息
* @param param 登录数据
* @return -
*/
@PostMapping(value = "/img/mini/creator/getCreatorInfo")
public R<LoginCreator> getCreatorInfo(@Validated @ApiParam("艺术家登录数据") @RequestBody CreatorLoginDto param);
/**
* 获取快手小程序用户信息
* @param dto 登录数据
* @return -
*/
@PostMapping(value = "/img/mini/fh/getFhUserInfo")
public R<LoginFhUser> getFhLoginUserByLoginParam(@Validated @RequestBody @ApiParam("登录对象") FhLoginDto dto);
/**
* 获取抖音小程序用户信息
* @param dto 登录数据
* @return -
*/
@PostMapping(value = "/img/mini/tiktok/getTiktokUserInfo")
public R<LoginTiktokUser> getTiktokLoginUserByLoginParam(@Validated @RequestBody @ApiParam("登录对象") TiktokLoginDto dto);
} }

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

@ -1,8 +1,14 @@
package com.bnyer.img.api.factory; package com.bnyer.img.api.factory;
import com.bnyer.common.core.domain.R; import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.dto.CreatorLoginDto;
import com.bnyer.common.core.dto.FhLoginDto;
import com.bnyer.common.core.dto.TiktokLoginDto;
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.LoginFhUser;
import com.bnyer.img.api.model.LoginTiktokUser;
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;
@ -28,6 +34,21 @@ public class RemoteImgFallbackFactory implements FallbackFactory<RemoteImgServic
public R<Integer> insertTiktokImg(TiktokImgMiniDto dto) { public R<Integer> insertTiktokImg(TiktokImgMiniDto dto) {
return R.fail("图片保存失败:" + throwable.getMessage()); return R.fail("图片保存失败:" + throwable.getMessage());
} }
@Override
public R<LoginCreator> getCreatorInfo(CreatorLoginDto param) {
return R.fail("获取艺术家失败:" + throwable.getMessage());
}
@Override
public R<LoginFhUser> getFhLoginUserByLoginParam(FhLoginDto dto) {
return R.fail("获取快手小程序用户信息失败:" + throwable.getMessage());
}
@Override
public R<LoginTiktokUser> getTiktokLoginUserByLoginParam(TiktokLoginDto dto) {
return R.fail("获取抖音小程序用户信息失败:" + throwable.getMessage());
}
}; };
} }
} }

57
bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/model/LoginCreator.java

@ -0,0 +1,57 @@
package com.bnyer.img.api.model;
import com.bnyer.common.core.vo.CreatorLoginVo;
import lombok.Data;
import java.io.Serializable;
/**
* @author chengkun
* @date 2022/5/30 16:25
*/
/**
* 艺术家信息
*/
@Data
public class LoginCreator implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 艺术家唯一标识
*/
private String token;
/**
* 主键id
*/
private Long creatorId;
/**
* 艺术家手机号
*/
private String creatorPhone;
/**
* 登录时间
*/
private Long loginTime;
/**
* 过期时间
*/
private Long expireTime;
/**
* 登录IP地址
*/
private String ipaddr;
/**
* 艺术家信息
*/
private CreatorLoginVo creator;
}

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

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

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

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

51
bnyer-auth/src/main/java/com/bnyer/auth/controller/CreatorController.java

@ -0,0 +1,51 @@
package com.bnyer.auth.controller;
import com.bnyer.auth.service.CreatorLoginService;
import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.dto.CreatorLoginDto;
import com.bnyer.common.security.service.CreatorTokenService;
import com.bnyer.common.security.utils.SecurityUtils;
import com.bnyer.img.api.model.LoginCreator;
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 CreatorController
{
@Autowired
private CreatorTokenService creatorTokenService;
@Autowired
private CreatorLoginService creatorService;
@PostMapping("/creatorLogin")
@ApiOperation("小程序艺术家登录")
public R<?> login(@Validated @ApiParam("艺术家数据") @RequestBody CreatorLoginDto param)
{
// 用户登录
LoginCreator login = creatorService.login(param);
// 获取登录token
return R.ok(creatorTokenService.createToken(login));
}
@PostMapping("/creatorLogout")
public R<?> logout(HttpServletRequest request)
{
String token = SecurityUtils.getToken(request);
creatorTokenService.delLoginCreator(token);
return R.ok();
}
}

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

@ -0,0 +1,49 @@
package com.bnyer.auth.controller;
import com.bnyer.auth.service.FhUserLoginService;
import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.dto.FhLoginDto;
import com.bnyer.common.security.service.FhUserTokenService;
import com.bnyer.common.security.utils.SecurityUtils;
import com.bnyer.img.api.model.LoginFhUser;
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 FhUserController
{
@Autowired
private FhUserLoginService fhUserLoginService;
@Autowired
private FhUserTokenService fUserTokenService;
@ApiOperation(value="快手小程序用户登录")
@PostMapping(value = "/fhUserLogin")
public R<?> loginFh(@Validated @RequestBody @ApiParam("登录对象") FhLoginDto dto){
LoginFhUser loginFhUser = fhUserLoginService.login(dto);
return R.ok(fUserTokenService.createToken(loginFhUser));
}
@PostMapping("/fhUserLogout")
@ApiOperation("快手小程序用户注销")
public R<?> logout(HttpServletRequest request)
{
String token = SecurityUtils.getToken(request);
//删除快手用户缓存
fUserTokenService.delLoginFhUser(token);
return R.ok();
}
}

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

@ -0,0 +1,49 @@
package com.bnyer.auth.controller;
import com.bnyer.auth.service.TiktokUserLoginService;
import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.dto.TiktokLoginDto;
import com.bnyer.common.security.service.TiktokUserTokenService;
import com.bnyer.common.security.utils.SecurityUtils;
import com.bnyer.img.api.model.LoginTiktokUser;
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 TiktokUserController
{
@Autowired
private TiktokUserLoginService tiktokUserLoginService;
@Autowired
private TiktokUserTokenService tiktokUserTokenService;
@ApiOperation(value="抖音小程序用户登录")
@PostMapping(value = "/tiktokUserLogin")
public R<?> loginFh(@Validated @RequestBody @ApiParam("登录对象") TiktokLoginDto dto){
LoginTiktokUser loginTiktokUser = tiktokUserLoginService.login(dto);
return R.ok(tiktokUserTokenService.createToken(loginTiktokUser));
}
@PostMapping("/tiktokUserLogout")
@ApiOperation("抖音小程序用户注销")
public R<?> logout(HttpServletRequest request)
{
String token = SecurityUtils.getToken(request);
//删除快手用户缓存
tiktokUserTokenService.delLoginFhUser(token);
return R.ok();
}
}

37
bnyer-auth/src/main/java/com/bnyer/auth/service/CreatorLoginService.java

@ -0,0 +1,37 @@
package com.bnyer.auth.service;
import com.bnyer.common.core.constant.TiktokConstant;
import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.dto.CreatorLoginDto;
import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.img.api.RemoteImgService;
import com.bnyer.img.api.model.LoginCreator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 艺术家端登录校验方法
*
* @author penny
*/
@Component
public class CreatorLoginService {
@Autowired
private RemoteImgService remoteImgService;
public LoginCreator login(CreatorLoginDto dto) {
R<LoginCreator> creatorInfo = remoteImgService.getCreatorInfo(dto);
if(creatorInfo.getData() == null){
throw new ServiceException("手机号或密码不正确!", TiktokConstant.TIKTOK_CREATOR_PWD_ERROR);
}
if(creatorInfo.getData().getCreator().getStatus().equals("0")){
throw new ServiceException("当前艺术家暂未审核,请耐心等待或联系客服!",TiktokConstant.TIKTOK_CREATOR_NOT_PASS_ERROR);
}
if(creatorInfo.getData().getCreator().getStatus().equals("2")){
throw new ServiceException("当前艺术家被封禁,请联系客服处理!",TiktokConstant.TIKTOK_CREATOR_BANED_ERROR);
}
return creatorInfo.getData();
}
}

24
bnyer-auth/src/main/java/com/bnyer/auth/service/FhUserLoginService.java

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

24
bnyer-auth/src/main/java/com/bnyer/auth/service/TiktokUserLoginService.java

@ -0,0 +1,24 @@
package com.bnyer.auth.service;
import com.bnyer.common.core.dto.TiktokLoginDto;
import com.bnyer.img.api.RemoteImgService;
import com.bnyer.img.api.model.LoginTiktokUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 抖音小程序端用户登录校验方法
*
* @author penny
*/
@Component
public class TiktokUserLoginService {
@Autowired
private RemoteImgService remoteImgService;
public LoginTiktokUser login(TiktokLoginDto dto) {
return remoteImgService.getTiktokLoginUserByLoginParam(dto).getData();
}
}

18
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/annotation/TokenCheck.java

@ -1,18 +0,0 @@
package com.bnyer.common.core.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 小程序用户token检测注解
*
* @author chengkun
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TokenCheck
{
}

28
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/CacheConstants.java

@ -5,8 +5,7 @@ package com.bnyer.common.core.constant;
* *
* @author ruoyi * @author ruoyi
*/ */
public class CacheConstants public class CacheConstants {
{
/** /**
* 缓存有效期默认720分钟 * 缓存有效期默认720分钟
*/ */
@ -18,7 +17,28 @@ public class CacheConstants
public final static long REFRESH_TIME = 120; public final static long REFRESH_TIME = 120;
/** /**
* 权限缓存前缀 * PC端权限缓存前缀
*/ */
public final static String LOGIN_TOKEN_KEY = "login_tokens:"; public final static String LOGIN_TOKEN_KEY = "login_pc_tokens:";
/**
* 微信艺术家端权限缓存前缀
*/
public final static String LOGIN_CREATOR_TOKEN_KEY = "bnyer.img.wechat.login.creator:";
/**
* 微信用户端权限缓存前缀
*/
public final static String LOGIN_WECHAT_TOKEN_KEY = "bnyer.img.wx.login.user:";
/**
* 抖音用户端权限缓存前缀
*/
public final static String LOGIN_TIKTOK_TOKEN_KEY = "bnyer.img.tiktok.login.user:";
/**
* 快手用户端权限缓存前缀
*/
public final static String LOGIN_FASTHAND_TOKEN_KEY = "bnyer.img.fh.login.user:";
} }

8
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/RedisKeyConstant.java

@ -66,22 +66,22 @@ public class RedisKeyConstant {
/** /**
* 抖音小程序用户登录键 * 抖音小程序用户登录键
*/ */
public static final String TIKTOK_USER_LOGIN_KEY = "bnyer.img.tiktok.user:"; public static final String TIKTOK_USER_LOGIN_KEY = "bnyer.img.tiktok.login.user:";
/** /**
* 快手小程序用户登录键 * 快手小程序用户登录键
*/ */
public static final String FH_USER_LOGIN_KEY = "bnyer.img.fh.user:"; public static final String FH_USER_LOGIN_KEY = "bnyer.img.fh.login.user:";
/** /**
* 微信小程序用户登录键 * 微信小程序用户登录键
*/ */
public static final String WECHAT_USER_LOGIN_KEY = "bnyer.img.wx.user:"; public static final String WECHAT_USER_LOGIN_KEY = "bnyer.img.wx.login.user:";
/** /**
* 微信小程序艺术家登录键 * 微信小程序艺术家登录键
*/ */
public static final String WECHAT_CREATOR_LOGIN_KEY = "bnyer.img.wechat.creator:"; public static final String WECHAT_CREATOR_LOGIN_KEY = "bnyer.img.wechat.login.creator:";
/** /**
* 微信小程序艺术家邀请键 * 微信小程序艺术家邀请键

92
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/SecurityConstants.java

@ -7,6 +7,7 @@ package com.bnyer.common.core.constant;
*/ */
public class SecurityConstants public class SecurityConstants
{ {
//***************************艺术家信息开始************************************
/** /**
* 用户ID字段 * 用户ID字段
*/ */
@ -41,4 +42,95 @@ public class SecurityConstants
* 登录用户 * 登录用户
*/ */
public static final String LOGIN_USER = "login_user"; public static final String LOGIN_USER = "login_user";
//***************************PC信息结束************************************
//***************************艺术家信息开始************************************
/**
* 艺术家ID字段
*/
public static final String DETAILS_CREATOR_ID = "creator_id";
/**
* 艺术家标识
*/
public static final String CREATOR_KEY = "creator_key";
/**
* 登录艺术家
*/
public static final String LOGIN_CREATOR = "login_creator";
/**
* 艺术家手机号字段
*/
public static final String DETAILS_PHONE = "creator_phone";
//***************************艺术家信息结束************************************
//***************************抖音用户信息开始************************************
/**
* 抖音用户ID字段
*/
public static final String DETAILS_TIKTOK_USER_ID = "tiktok_user_id";
/**
* 抖音用户标识
*/
public static final String TIKTOK_USER_KEY = "tiktok_user_key";
/**
* 抖音用户名字段
*/
public static final String DETAILS_TIKTOK_USERNAME = "tiktok_user_username";
/**
* 抖音用户openId
*/
public static final String DETAILS_TIKTOK_OPENID = "tiktok_user_openid";
//***************************抖音用户信息结束************************************
//***************************微信用户信息开始************************************
/**
* 微信用户ID字段
*/
public static final String DETAILS_WECHAT_USER_ID = "wechat_user_id";
/**
* 微信用户标识
*/
public static final String WECHAT_USER_KEY = "wechat_user_key";
/**
* 微信用户名字段
*/
public static final String DETAILS_WECHAT_USERNAME = "wechat_user_username";
/**
* 微信用户openId
*/
public static final String DETAILS_WECHAT_OPENID = "wechat_user_openid";
//***************************微信用户信息结束************************************
//***************************快手用户信息开始************************************
/**
* 快手用户ID字段
*/
public static final String DETAILS_FH_USER_ID = "fh_user_id";
/**
* 快手用户标识
*/
public static final String FH_USER_KEY = "fh_user_key";
/**
* 快手用户名字段
*/
public static final String DETAILS_FH_USERNAME = "fh_user_username";
/**
* 快手用户openId
*/
public static final String DETAILS_FH_OPENID = "fh_user_openid";
//***************************快手用户信息结束************************************
} }

24
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/TokenConstants.java

@ -8,10 +8,30 @@ package com.bnyer.common.core.constant;
public class TokenConstants public class TokenConstants
{ {
/** /**
* 令牌自定义标识 * Pc端标识
*/ */
public static final String AUTHENTICATION = "Authorization"; public static final String AUTHENTICATION = "Authorization";
/**
* 微信小程序艺术家端授权标识
*/
public static final String CREATOR_APP_AUTH = "CreatorAuthorization";
/**
* 微信小程序用户端授权标识
*/
public static final String WECHAT_APP_AUTH = "WechatAuthorization";
/**
* 抖音小程序用户端授权标识
*/
public static final String TIKTOK_APP_AUTH = "TiktokAuthorization";
/**
* 快手小程序用户端授权标识
*/
public static final String FASTHAND_APP_AUTH = "FhAuthorization";
/** /**
* 令牌前缀 * 令牌前缀
*/ */
@ -20,6 +40,6 @@ public class TokenConstants
/** /**
* 令牌秘钥 * 令牌秘钥
*/ */
public final static String SECRET = "abcdefghijklmnopqrstuvwxyz"; public final static String SECRET = "abcdefghijklmnopqrstuvwxyzciyuanjiedianbnyer";
} }

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

@ -1,6 +1,5 @@
package com.bnyer.common.core.utils; package com.bnyer.common.core.utils;
import java.util.Map;
import com.bnyer.common.core.constant.SecurityConstants; import com.bnyer.common.core.constant.SecurityConstants;
import com.bnyer.common.core.constant.TokenConstants; import com.bnyer.common.core.constant.TokenConstants;
import com.bnyer.common.core.text.Convert; import com.bnyer.common.core.text.Convert;
@ -8,6 +7,8 @@ import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts; import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Map;
/** /**
* Jwt工具类 * Jwt工具类
* *
@ -25,8 +26,7 @@ public class JwtUtils
*/ */
public static String createToken(Map<String, Object> claims) public static String createToken(Map<String, Object> claims)
{ {
String token = Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact(); return Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact();
return token;
} }
/** /**
@ -40,6 +40,7 @@ public class JwtUtils
return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody(); return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();
} }
//***************************PC信息开始************************************
/** /**
* 根据令牌获取用户标识 * 根据令牌获取用户标识
* *
@ -53,26 +54,26 @@ public class JwtUtils
} }
/** /**
* 根据令牌获取用户标识 * 根据令牌获取用户ID
* *
* @param claims 身份信息 * @param token 令牌
* @return 用户ID * @return 用户ID
*/ */
public static String getUserKey(Claims claims) public static String getUserId(String token)
{ {
return getValue(claims, SecurityConstants.USER_KEY); Claims claims = parseToken(token);
return getValue(claims, SecurityConstants.DETAILS_USER_ID);
} }
/** /**
* 根据令牌获取用户ID * 根据令牌获取用户标识
* *
* @param token 令牌 * @param claims 身份信息
* @return 用户ID * @return 用户ID
*/ */
public static String getUserId(String token) public static String getUserKey(Claims claims)
{ {
Claims claims = parseToken(token); return getValue(claims, SecurityConstants.USER_KEY);
return getValue(claims, SecurityConstants.DETAILS_USER_ID);
} }
/** /**
@ -108,6 +109,218 @@ public class JwtUtils
{ {
return getValue(claims, SecurityConstants.DETAILS_USERNAME); return getValue(claims, SecurityConstants.DETAILS_USERNAME);
} }
//***************************PC信息结束************************************
//***************************艺术家信息开始************************************
/**
* 根据令牌获取艺术家标识
*
* @param token 令牌
* @return 艺术家ID
*/
public static String getCreatorKey(String token)
{
Claims claims = parseToken(token);
return getValue(claims, SecurityConstants.CREATOR_KEY);
}
/**
* 根据令牌获取艺术家标识
*
* @param claims 身份信息
* @return 艺术家ID
*/
public static String getCreatorKey(Claims claims)
{
return getValue(claims, SecurityConstants.CREATOR_KEY);
}
/**
* 根据身份信息获取艺术家ID
*
* @param claims 身份信息
* @return 艺术家ID
*/
public static String getCreatorId(Claims claims)
{
return getValue(claims, SecurityConstants.DETAILS_CREATOR_ID);
}
/**
* 根据身份信息获取艺术家手机号
*
* @param claims 身份信息
* @return 手机号
*/
public static String getCreatorPhone(Claims claims)
{
return getValue(claims, SecurityConstants.DETAILS_PHONE);
}
//***************************艺术家信息结束************************************
//***************************抖音用户信息开始************************************
/**
* 根据令牌获取抖音用户标识
*
* @param claims 身份信息
* @return -
*/
public static String getTiktokUserKey(Claims claims)
{
return getValue(claims, SecurityConstants.TIKTOK_USER_KEY);
}
/**
* 根据令牌获取抖音用户标识
*
* @param token 令牌
* @return -
*/
public static String getTiktokUserKey(String token)
{
Claims claims = parseToken(token);
return getValue(claims, SecurityConstants.TIKTOK_USER_KEY);
}
/**
* 根据身份信息获取抖音用户ID
*
* @param claims 身份信息
* @return -
*/
public static String getTikTokUserId(Claims claims)
{
return getValue(claims, SecurityConstants.DETAILS_TIKTOK_USER_ID);
}
/**
* 根据身份信息获取抖音用户昵称
*
* @param claims 身份信息
* @return -
*/
public static String getTikTokUserName(Claims claims)
{
return getValue(claims, SecurityConstants.DETAILS_TIKTOK_USERNAME);
}
/**
* 根据身份信息获取抖音用户openid
*
* @param claims 身份信息
* @return -
*/
public static String getTiktokUserOpenid(Claims claims)
{
return getValue(claims, SecurityConstants.DETAILS_TIKTOK_OPENID);
}
//***************************抖音用户信息结束************************************
//***************************微信用户信息开始************************************
/**
* 根据令牌获取微信用户标识
*
* @param claims 身份信息
* @return -
*/
public static String getWechatUserKey(Claims claims)
{
return getValue(claims, SecurityConstants.WECHAT_USER_KEY);
}
/**
* 根据令牌获取微信用户标识
*
* @param token 令牌
* @return -
*/
public static String getWechatUserKey(String token)
{
Claims claims = parseToken(token);
return getValue(claims, SecurityConstants.WECHAT_USER_KEY);
}
/**
* 根据身份信息获取微信用户ID
*
* @param claims 身份信息
* @return -
*/
public static String getWechatUserId(Claims claims)
{
return getValue(claims, SecurityConstants.DETAILS_WECHAT_USER_ID);
}
/**
* 根据身份信息获取微信用户昵称
*
* @param claims 身份信息
* @return -
*/
public static String getWechatUserName(Claims claims)
{
return getValue(claims, SecurityConstants.DETAILS_WECHAT_USERNAME);
}
//***************************微信用户信息结束************************************
//***************************快手用户信息开始************************************
/**
* 根据令牌获取快手用户标识
*
* @param claims 身份信息
* @return -
*/
public static String getFhUserKey(Claims claims)
{
return getValue(claims, SecurityConstants.FH_USER_KEY);
}
/**
* 根据令牌获取快手用户标识
*
* @param token 令牌
* @return -
*/
public static String getFhUserKey(String token)
{
Claims claims = parseToken(token);
return getValue(claims, SecurityConstants.FH_USER_KEY);
}
/**
* 根据身份信息获取快手用户ID
*
* @param claims 身份信息
* @return -
*/
public static String getFhUserId(Claims claims)
{
return getValue(claims, SecurityConstants.DETAILS_FH_USER_ID);
}
/**
* 根据身份信息获取快手用户昵称
*
* @param claims 身份信息
* @return -
*/
public static String getFhUserName(Claims claims)
{
return getValue(claims, SecurityConstants.DETAILS_FH_USERNAME);
}
/**
* 根据身份信息获取快手用户openid
*
* @param claims 身份信息
* @return -
*/
public static String getFhUserOpenid(Claims claims)
{
return getValue(claims, SecurityConstants.DETAILS_FH_OPENID);
}
//***************************快手用户信息结束************************************
/** /**
* 根据身份信息获取键值 * 根据身份信息获取键值

2
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorLoginVo.java → bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/CreatorLoginVo.java

@ -1,4 +1,4 @@
package com.bnyer.img.vo; package com.bnyer.common.core.vo;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;

45
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/FhUserLoginVo.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 FhUserLoginVo implements Serializable {
@ApiModelProperty(value="id")
private Long id;
@ApiModelProperty(value="用户昵称")
private String username;
@ApiModelProperty(value="快手id")
private String fhCode;
@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;
}

45
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/TiktokUserLoginVo.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 TiktokUserLoginVo implements Serializable {
@ApiModelProperty(value="id")
private Long id;
@ApiModelProperty(value="用户昵称")
private String username;
@ApiModelProperty(value="抖音id")
private String tiktokCode;
@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;
}

9
bnyer-common/bnyer-common-security/pom.xml

@ -28,11 +28,20 @@
<artifactId>bnyer-api-system</artifactId> <artifactId>bnyer-api-system</artifactId>
</dependency> </dependency>
<!-- bnyer Common Redis--> <!-- bnyer Common Redis-->
<dependency> <dependency>
<groupId>com.dimensionalnode</groupId> <groupId>com.dimensionalnode</groupId>
<artifactId>bnyer-common-redis</artifactId> <artifactId>bnyer-common-redis</artifactId>
</dependency> </dependency>
<!-- bnyer Api img -->
<dependency>
<groupId>com.dimensionalnode</groupId>
<artifactId>bnyer-api-img</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>

3
bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/config/WebMvcConfig.java

@ -12,7 +12,8 @@ import com.bnyer.common.security.interceptor.HeaderInterceptor;
public class WebMvcConfig implements WebMvcConfigurer public class WebMvcConfig implements WebMvcConfigurer
{ {
/** 不需要拦截地址 */ /** 不需要拦截地址 */
public static final String[] excludeUrls = { "/login", "/logout", "/refresh" }; public static final String[] excludeUrls = { "/login", "/logout", "/refresh","/creatorLogin",
"/creatorLogout","/fhUserLogin","/fhUserLogout","/wxUserLogout","/wxUserLogin","/tiktokUserLogin","/tiktokUserLogout"};
@Override @Override
public void addInterceptors(InterceptorRegistry registry) public void addInterceptors(InterceptorRegistry registry)

97
bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/service/CreatorTokenService.java

@ -0,0 +1,97 @@
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.LoginCreator;
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 CreatorTokenService
{
@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_CREATOR_LOGIN_KEY;
/**
* 创建令牌
*/
public Map<String, Object> createToken(LoginCreator loginCreator)
{
String token = IdUtils.fastUUID();
Long creatorId = loginCreator.getCreator().getId();
String creatorPhone = loginCreator.getCreator().getPhone();
loginCreator.setToken(token);
loginCreator.setCreatorId(creatorId);
loginCreator.setCreatorPhone(creatorPhone);
loginCreator.setIpaddr(IpUtils.getIpAddr(ServletUtils.getRequest()));
refreshToken(loginCreator);
// Jwt存储信息
Map<String, Object> claimsMap = new HashMap<String, Object>();
claimsMap.put(SecurityConstants.CREATOR_KEY, token);
claimsMap.put(SecurityConstants.DETAILS_CREATOR_ID, creatorId);
claimsMap.put(SecurityConstants.DETAILS_PHONE, creatorPhone);
// 接口返回信息
Map<String, Object> rspMap = new HashMap<String, Object>();
rspMap.put("access_token", JwtUtils.createToken(claimsMap));
rspMap.put("userInfo",loginCreator.getCreator());
rspMap.put("expires_in", expireTime);
return rspMap;
}
/**
* 删除用户缓存信息
*/
public void delLoginCreator(String token)
{
if (StringUtils.isNotEmpty(token))
{
String creatorKey = JwtUtils.getCreatorKey(token);
redisService.deleteObject(getTokenKey(creatorKey));
}
}
/**
* 刷新令牌有效期
*
* @param loginCreator 艺术家登录信息
*/
public void refreshToken(LoginCreator loginCreator)
{
loginCreator.setLoginTime(System.currentTimeMillis());
loginCreator.setExpireTime(loginCreator.getLoginTime() + expireTime * MILLIS_MINUTE);
// 根据uuid将loginCreator缓存
String creatorKey = getTokenKey(loginCreator.getToken());
redisService.setCacheObject(creatorKey, loginCreator, expireTime, TimeUnit.MINUTES);
}
private String getTokenKey(String token)
{
return ACCESS_TOKEN + token;
}
}

100
bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/service/FhUserTokenService.java

@ -0,0 +1,100 @@
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 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 FhUserTokenService
{
@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.FH_USER_LOGIN_KEY;
/**
* 创建令牌
*/
public Map<String, Object> createToken(LoginFhUser loginFhUser)
{
String token = IdUtils.fastUUID();
Long fhUserId = loginFhUser.getFhUser().getId();
String fhUserName = loginFhUser.getFhUser().getUsername();
String openId = loginFhUser.getFhUser().getFhCode();
loginFhUser.setToken(token);
loginFhUser.setFhUserId(fhUserId);
loginFhUser.setFhUserName(fhUserName);
loginFhUser.setFhUserOpenId(openId);
loginFhUser.setIpaddr(IpUtils.getIpAddr(ServletUtils.getRequest()));
refreshToken(loginFhUser);
// Jwt存储信息
Map<String, Object> claimsMap = new HashMap<String, Object>();
claimsMap.put(SecurityConstants.FH_USER_KEY, token);
claimsMap.put(SecurityConstants.DETAILS_FH_USER_ID, fhUserId);
claimsMap.put(SecurityConstants.DETAILS_FH_USERNAME, fhUserName);
claimsMap.put(SecurityConstants.DETAILS_FH_OPENID,openId);
// 接口返回信息
Map<String, Object> rspMap = new HashMap<String, Object>();
rspMap.put("access_token", JwtUtils.createToken(claimsMap));
rspMap.put("userInfo",loginFhUser.getFhUser());
rspMap.put("expires_in", expireTime);
return rspMap;
}
/**
* 删除快手小程序用户缓存信息
*/
public void delLoginFhUser(String token)
{
if (StringUtils.isNotEmpty(token))
{
String fhUserKey = JwtUtils.getFhUserKey(token);
redisService.deleteObject(getTokenKey(fhUserKey));
}
}
/**
* 刷新令牌有效期
*
* @param loginFhUser 快手小程序用户登录信息
*/
public void refreshToken(LoginFhUser loginFhUser)
{
loginFhUser.setLoginTime(System.currentTimeMillis());
loginFhUser.setExpireTime(loginFhUser.getLoginTime() + expireTime * MILLIS_MINUTE);
// 根据uuid将loginFhUser缓存
String fhUserKey = getTokenKey(loginFhUser.getToken());
redisService.setCacheObject(fhUserKey, loginFhUser, expireTime, TimeUnit.MINUTES);
}
private String getTokenKey(String token)
{
return ACCESS_TOKEN + token;
}
}

100
bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/service/TiktokUserTokenService.java

@ -0,0 +1,100 @@
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.LoginTiktokUser;
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 TiktokUserTokenService
{
@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.TIKTOK_USER_LOGIN_KEY;
/**
* 创建令牌
*/
public Map<String, Object> createToken(LoginTiktokUser loginTiktokUser)
{
String token = IdUtils.fastUUID();
Long tiktokUserId = loginTiktokUser.getTiktokUser().getId();
String tiktokUserName = loginTiktokUser.getTiktokUser().getUsername();
String openId = loginTiktokUser.getTiktokUser().getTiktokCode();
loginTiktokUser.setToken(token);
loginTiktokUser.setTiktokUserId(tiktokUserId);
loginTiktokUser.setTiktokUserName(tiktokUserName);
loginTiktokUser.setTiktokUserOpenId(openId);
loginTiktokUser.setIpaddr(IpUtils.getIpAddr(ServletUtils.getRequest()));
refreshToken(loginTiktokUser);
// Jwt存储信息
Map<String, Object> claimsMap = new HashMap<String, Object>();
claimsMap.put(SecurityConstants.TIKTOK_USER_KEY, token);
claimsMap.put(SecurityConstants.DETAILS_TIKTOK_USER_ID, tiktokUserId);
claimsMap.put(SecurityConstants.DETAILS_TIKTOK_USERNAME, tiktokUserName);
claimsMap.put(SecurityConstants.DETAILS_TIKTOK_OPENID,openId);
// 接口返回信息
Map<String, Object> rspMap = new HashMap<String, Object>();
rspMap.put("access_token", JwtUtils.createToken(claimsMap));
rspMap.put("userInfo",loginTiktokUser.getTiktokUser());
rspMap.put("expires_in", expireTime);
return rspMap;
}
/**
* 删除抖音小程序用户缓存信息
*/
public void delLoginFhUser(String token)
{
if (StringUtils.isNotEmpty(token))
{
String tiktokUserKey = JwtUtils.getTiktokUserKey(token);
redisService.deleteObject(getTokenKey(tiktokUserKey));
}
}
/**
* 刷新令牌有效期
*
* @param loginTiktokUser 抖音小程序用户登录信息
*/
public void refreshToken(LoginTiktokUser loginTiktokUser)
{
loginTiktokUser.setLoginTime(System.currentTimeMillis());
loginTiktokUser.setExpireTime(loginTiktokUser.getLoginTime() + expireTime * MILLIS_MINUTE);
// 根据uuid将loginTiktokUser缓存
String tiktokUserKey = getTokenKey(loginTiktokUser.getToken());
redisService.setCacheObject(tiktokUserKey, loginTiktokUser, expireTime, TimeUnit.MINUTES);
}
private String getTokenKey(String token)
{
return ACCESS_TOKEN + token;
}
}

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

@ -1,6 +1,9 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.bnyer.common.security.config.WebMvcConfig,\ com.bnyer.common.security.config.WebMvcConfig,\
com.bnyer.common.security.service.TokenService,\ com.bnyer.common.security.service.TokenService,\
com.bnyer.common.security.service.CreatorTokenService,\
com.bnyer.common.security.service.FhUserTokenService,\
com.bnyer.common.security.service.TiktokUserTokenService,\
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

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

@ -1,14 +1,5 @@
package com.bnyer.gateway.filter; package com.bnyer.gateway.filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import com.bnyer.common.core.constant.CacheConstants; import com.bnyer.common.core.constant.CacheConstants;
import com.bnyer.common.core.constant.HttpStatus; import com.bnyer.common.core.constant.HttpStatus;
import com.bnyer.common.core.constant.SecurityConstants; import com.bnyer.common.core.constant.SecurityConstants;
@ -19,6 +10,15 @@ import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.common.redis.service.RedisService; import com.bnyer.common.redis.service.RedisService;
import com.bnyer.gateway.config.properties.IgnoreWhiteProperties; import com.bnyer.gateway.config.properties.IgnoreWhiteProperties;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
/** /**
@ -56,31 +56,144 @@ public class AuthFilter implements GlobalFilter, Ordered
{ {
return unauthorizedResponse(exchange, "令牌不能为空"); return unauthorizedResponse(exchange, "令牌不能为空");
} }
Claims claims = JwtUtils.parseToken(token); //判断是哪个类型发过来的token
if (claims == null) //PC端
{ if(request.getHeaders().containsKey(TokenConstants.AUTHENTICATION)){
return unauthorizedResponse(exchange, "令牌已过期或验证不正确!"); Claims claims = JwtUtils.parseToken(token);
} if (claims == null)
String userkey = JwtUtils.getUserKey(claims); {
boolean islogin = redisService.hasKey(getTokenKey(userkey)); return unauthorizedResponse(exchange, "令牌已过期或验证不正确!");
if (!islogin) }
{ String userKey = JwtUtils.getUserKey(claims);
return unauthorizedResponse(exchange, "登录状态已过期"); boolean isLogin = redisService.hasKey(getUserTokenKey(userKey));
} if (!isLogin)
String userid = JwtUtils.getUserId(claims); {
String username = JwtUtils.getUserName(claims); return unauthorizedResponse(exchange, "登录状态已过期");
if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username)) }
{ String userid = JwtUtils.getUserId(claims);
String username = JwtUtils.getUserName(claims);
if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username))
{
return unauthorizedResponse(exchange, "令牌验证失败");
}
// 设置用户信息到请求
addHeader(mutate, SecurityConstants.USER_KEY, userKey);
addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid);
addHeader(mutate, SecurityConstants.DETAILS_USERNAME, username);
// 内部请求来源参数清除
removeHeader(mutate, SecurityConstants.FROM_SOURCE);
return chain.filter(exchange.mutate().request(mutate.build()).build());
//微信艺术家端
}else if(request.getHeaders().containsKey(TokenConstants.CREATOR_APP_AUTH)){
Claims claims = JwtUtils.parseToken(token);
if (claims == null)
{
return unauthorizedResponse(exchange, "令牌已过期或验证不正确!");
}
String creatorkey = JwtUtils.getCreatorKey(claims);
boolean islogin = redisService.hasKey(getCreatorTokenKey(creatorkey));
if (!islogin)
{
return unauthorizedResponse(exchange, "登录状态已过期");
}
String creatorId = JwtUtils.getCreatorId(claims);
String creatorPhone = JwtUtils.getCreatorPhone(claims);
if (StringUtils.isEmpty(creatorId) || StringUtils.isEmpty(creatorPhone))
{
return unauthorizedResponse(exchange, "令牌验证失败");
}
// 设置用户信息到请求
addHeader(mutate, SecurityConstants.CREATOR_KEY, creatorkey);
addHeader(mutate, SecurityConstants.DETAILS_CREATOR_ID, creatorId);
addHeader(mutate, SecurityConstants.DETAILS_PHONE, creatorPhone);
// 内部请求来源参数清除
removeHeader(mutate, SecurityConstants.FROM_SOURCE);
return chain.filter(exchange.mutate().request(mutate.build()).build());
//抖音用户端
}else if(request.getHeaders().containsKey(TokenConstants.TIKTOK_APP_AUTH)){
Claims claims = JwtUtils.parseToken(token);
if (claims == null)
{
return unauthorizedResponse(exchange, "令牌已过期或验证不正确!");
}
String tikTokUserkey = JwtUtils.getTiktokUserKey(claims);
boolean islogin = redisService.hasKey(getTiktokUserTokenKey(tikTokUserkey));
if (!islogin)
{
return unauthorizedResponse(exchange, "登录状态已过期");
}
String tikTokUserId = JwtUtils.getTikTokUserId(claims);
String tikTokUserName = JwtUtils.getTikTokUserName(claims);
String openId = JwtUtils.getTiktokUserOpenid(claims);
if (StringUtils.isEmpty(tikTokUserId) || StringUtils.isEmpty(tikTokUserName) || StringUtils.isEmpty(openId))
{
return unauthorizedResponse(exchange, "令牌验证失败");
}
// 设置用户信息到请求
addHeader(mutate, SecurityConstants.TIKTOK_USER_KEY, tikTokUserkey);
addHeader(mutate, SecurityConstants.DETAILS_TIKTOK_USER_ID, tikTokUserId);
addHeader(mutate, SecurityConstants.DETAILS_TIKTOK_USERNAME, tikTokUserName);
addHeader(mutate, SecurityConstants.DETAILS_TIKTOK_OPENID, openId);
// 内部请求来源参数清除
removeHeader(mutate, SecurityConstants.FROM_SOURCE);
return chain.filter(exchange.mutate().request(mutate.build()).build());
//微信用户端
}else if(request.getHeaders().containsKey(TokenConstants.WECHAT_APP_AUTH)){
Claims claims = JwtUtils.parseToken(token);
if (claims == null)
{
return unauthorizedResponse(exchange, "令牌已过期或验证不正确!");
}
String wechatUserKey = JwtUtils.getWechatUserKey(claims);
boolean isLogin = redisService.hasKey(getWechatUserTokenKey(wechatUserKey));
if (!isLogin)
{
return unauthorizedResponse(exchange, "登录状态已过期");
}
String wechatUserId = JwtUtils.getWechatUserId(claims);
String wechatUserName = JwtUtils.getWechatUserName(claims);
if (StringUtils.isEmpty(wechatUserId) || StringUtils.isEmpty(wechatUserName))
{
return unauthorizedResponse(exchange, "令牌验证失败");
}
// 设置用户信息到请求
addHeader(mutate, SecurityConstants.WECHAT_USER_KEY, wechatUserKey);
addHeader(mutate, SecurityConstants.DETAILS_WECHAT_USER_ID, wechatUserId);
addHeader(mutate, SecurityConstants.DETAILS_WECHAT_USERNAME, wechatUserName);
// 内部请求来源参数清除
removeHeader(mutate, SecurityConstants.FROM_SOURCE);
return chain.filter(exchange.mutate().request(mutate.build()).build());
//快手用户端
}else if(request.getHeaders().containsKey(TokenConstants.FASTHAND_APP_AUTH)){
Claims claims = JwtUtils.parseToken(token);
if (claims == null)
{
return unauthorizedResponse(exchange, "令牌已过期或验证不正确!");
}
String fhUserKey = JwtUtils.getFhUserKey(claims);
boolean isLogin = redisService.hasKey(getFhUserTokenKey(fhUserKey));
if (!isLogin)
{
return unauthorizedResponse(exchange, "登录状态已过期");
}
String fhUserId = JwtUtils.getFhUserId(claims);
String fhUserName = JwtUtils.getFhUserName(claims);
String openId = JwtUtils.getFhUserOpenid(claims);
if (StringUtils.isEmpty(fhUserId) || StringUtils.isEmpty(fhUserName) || StringUtils.isEmpty(openId))
{
return unauthorizedResponse(exchange, "令牌验证失败");
}
// 设置用户信息到请求
addHeader(mutate, SecurityConstants.FH_USER_KEY, fhUserKey);
addHeader(mutate, SecurityConstants.DETAILS_FH_USER_ID, fhUserId);
addHeader(mutate, SecurityConstants.DETAILS_FH_USERNAME, fhUserName);
addHeader(mutate,SecurityConstants.DETAILS_FH_OPENID,openId);
// 内部请求来源参数清除
removeHeader(mutate, SecurityConstants.FROM_SOURCE);
return chain.filter(exchange.mutate().request(mutate.build()).build());
}else{
return unauthorizedResponse(exchange, "令牌验证失败"); return unauthorizedResponse(exchange, "令牌验证失败");
} }
// 设置用户信息到请求
addHeader(mutate, SecurityConstants.USER_KEY, userkey);
addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid);
addHeader(mutate, SecurityConstants.DETAILS_USERNAME, username);
// 内部请求来源参数清除
removeHeader(mutate, SecurityConstants.FROM_SOURCE);
return chain.filter(exchange.mutate().request(mutate.build()).build());
} }
private void addHeader(ServerHttpRequest.Builder mutate, String name, Object value) private void addHeader(ServerHttpRequest.Builder mutate, String name, Object value)
@ -106,25 +219,93 @@ public class AuthFilter implements GlobalFilter, Ordered
} }
/** /**
* 获取缓存key * 获取PC端缓存key
*/ */
private String getTokenKey(String token) private String getUserTokenKey(String token)
{ {
return CacheConstants.LOGIN_TOKEN_KEY + token; return CacheConstants.LOGIN_TOKEN_KEY + token;
} }
/**
* 获取微信艺术家端缓存key
*/
private String getCreatorTokenKey(String token)
{
return CacheConstants.LOGIN_CREATOR_TOKEN_KEY + token;
}
/**
* 获取抖音用户端缓存key
*/
private String getTiktokUserTokenKey(String token)
{
return CacheConstants.LOGIN_TIKTOK_TOKEN_KEY + token;
}
/**
* 获取微信用户端缓存key
*/
private String getWechatUserTokenKey(String token)
{
return CacheConstants.LOGIN_WECHAT_TOKEN_KEY + token;
}
/**
* 获取快手用户端缓存key
*/
private String getFhUserTokenKey(String token)
{
return CacheConstants.LOGIN_FASTHAND_TOKEN_KEY + token;
}
/** /**
* 获取请求token * 获取请求token
*/ */
private String getToken(ServerHttpRequest request) private String getToken(ServerHttpRequest request)
{ {
String token = request.getHeaders().getFirst(TokenConstants.AUTHENTICATION); if(request.getHeaders().containsKey(TokenConstants.AUTHENTICATION)) {
// 如果前端设置了令牌前缀,则裁剪掉前缀 String token = request.getHeaders().getFirst(TokenConstants.AUTHENTICATION);
if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX)) // 如果前端设置了令牌前缀,则裁剪掉前缀
{ if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX))
token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY); {
token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY);
}
return token;
}else if(request.getHeaders().containsKey(TokenConstants.CREATOR_APP_AUTH)){
String token = request.getHeaders().getFirst(TokenConstants.CREATOR_APP_AUTH);
// 如果前端设置了令牌前缀,则裁剪掉前缀
if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX))
{
token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY);
}
return token;
}else if(request.getHeaders().containsKey(TokenConstants.FASTHAND_APP_AUTH) ){
String token = request.getHeaders().getFirst(TokenConstants.FASTHAND_APP_AUTH);
// 如果前端设置了令牌前缀,则裁剪掉前缀
if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX))
{
token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY);
}
return token;
}else if(request.getHeaders().containsKey(TokenConstants.TIKTOK_APP_AUTH)){
String token = request.getHeaders().getFirst(TokenConstants.TIKTOK_APP_AUTH);
// 如果前端设置了令牌前缀,则裁剪掉前缀
if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX))
{
token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY);
}
return token;
}else if( request.getHeaders().containsKey(TokenConstants.WECHAT_APP_AUTH)){
String token = request.getHeaders().getFirst(TokenConstants.WECHAT_APP_AUTH);
// 如果前端设置了令牌前缀,则裁剪掉前缀
if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX))
{
token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY);
}
return token;
}else{
return "";
} }
return token;
} }
@Override @Override

36
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java

@ -3,10 +3,12 @@ package com.bnyer.img.controller;
import com.alibaba.fastjson.JSON; 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.R;
import com.bnyer.common.core.dto.*; import com.bnyer.common.core.dto.*;
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.LoginCreator;
import com.bnyer.img.service.*; import com.bnyer.img.service.*;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -346,21 +348,21 @@ public class CreatorMiniController extends BaseController {
} }
//@TokenCheck //@TokenCheck
@PostMapping("/login") // @PostMapping("/login")
@ApiOperation("小程序艺术家登录") // @ApiOperation("小程序艺术家登录")
public AjaxResult login(@Validated @ApiParam("艺术家数据") @RequestBody CreatorLoginDto param) // public AjaxResult login(@Validated @ApiParam("艺术家数据") @RequestBody CreatorLoginDto param)
{ // {
log.info("小程序艺术家数据参数为:{}", JSON.toJSON(param)); // log.info("小程序艺术家数据参数为:{}", JSON.toJSON(param));
return AjaxResult.success(creatorService.login(param)); // return AjaxResult.success(creatorService.login(param));
} // }
//@TokenCheck //@TokenCheck
@PostMapping("/logout") // @PostMapping("/logout")
@ApiOperation("小程序艺术家登出") // @ApiOperation("小程序艺术家登出")
public AjaxResult logout(@Validated @ApiParam("艺术家数据") @RequestBody CreatorLogoutDto param) // public AjaxResult logout(@Validated @ApiParam("艺术家数据") @RequestBody CreatorLogoutDto param)
{ // {
return AjaxResult.success(creatorService.logout(param.getPhone())); // return AjaxResult.success(creatorService.logout(param.getPhone()));
} // }
//@TokenCheck //@TokenCheck
@GetMapping("/getCreatorInfo/{creatorId}") @GetMapping("/getCreatorInfo/{creatorId}")
@ -370,6 +372,14 @@ public class CreatorMiniController extends BaseController {
return AjaxResult.success(creatorService.getCreatorInfo(creatorId)); return AjaxResult.success(creatorService.getCreatorInfo(creatorId));
} }
//@TokenCheck
@PostMapping("/getCreatorInfo")
@ApiOperation("获取艺术家信息")
public R<LoginCreator> getCreatorInfoByPhoneAndPassword(@Validated @ApiParam("艺术家登录数据") @RequestBody CreatorLoginDto param)
{
return creatorService.getCreatorInfoByPhoneAndPassword(param.getPhone(),param.getPassword());
}
//@TokenCheck //@TokenCheck
@ApiOperation(value="查询艺术家分类图片数量") @ApiOperation(value="查询艺术家分类图片数量")
@GetMapping(value = "/queryCreatorTypeImgNum/{creatorId}") @GetMapping(value = "/queryCreatorTypeImgNum/{creatorId}")

19
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/FhMiniController.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.LoginFhUser;
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;
@ -202,12 +204,19 @@ public class FhMiniController extends BaseController {
log.debug("【快手图文小程序】查询是否点赞过参数为:{}", JSON.toJSONString(dto)); log.debug("【快手图文小程序】查询是否点赞过参数为:{}", JSON.toJSONString(dto));
return AjaxResult.success(tiktokLikeService.judgeLike(dto.getUserId(),dto.getImgId(),"1")); return AjaxResult.success(tiktokLikeService.judgeLike(dto.getUserId(),dto.getImgId(),"1"));
} }
//
// @ApiOperation(value="用户登录")
// @PostMapping(value = "/loginFh")
// public R<Map<String,Object>> loginFh(@Validated @RequestBody @ApiParam("登录对象") FhLoginDto dto){
// log.info("【快手图文小程序】用户【{}】授权登录了", dto.getCode());
// return R.ok(fhUserService.login(dto));
// }
@ApiOperation(value="用户登录") @ApiOperation(value="获取快手小程序用户")
@PostMapping(value = "/loginFh") @PostMapping(value = "/getFhUserInfo")
public AjaxResult loginFh(@Validated @RequestBody @ApiParam("登录对象") FhLoginDto dto){ public R<LoginFhUser> getFhLoginUserByLoginParam(@Validated @RequestBody @ApiParam("登录对象") FhLoginDto dto){
log.info("【快手图文小程序】用户【{}】授权登录了", dto.getCode()); return fhUserService.getFhLoginUserByLoginParam(dto);
return AjaxResult.success(fhUserService.login(dto));
} }
//@TokenCheck //@TokenCheck

18
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/TiktokMiniController.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.LoginTiktokUser;
import com.bnyer.img.service.*; import com.bnyer.img.service.*;
import com.bnyer.img.vo.*; import com.bnyer.img.vo.*;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
@ -202,11 +204,17 @@ public class TiktokMiniController extends BaseController {
return AjaxResult.success(tiktokLikeService.judgeLike(dto.getUserId(),dto.getImgId(),"0")); return AjaxResult.success(tiktokLikeService.judgeLike(dto.getUserId(),dto.getImgId(),"0"));
} }
@ApiOperation(value="用户登录") // @ApiOperation(value="用户登录")
@PostMapping(value = "/loginTiktok") // @PostMapping(value = "/loginTiktok")
public AjaxResult loginTiktok(@Validated @RequestBody @ApiParam("登录对象") TiktokLoginDto dto){ // public AjaxResult loginTiktok(@Validated @RequestBody @ApiParam("登录对象") TiktokLoginDto dto){
log.info("【抖音图文小程序】用户【{}】授权登录了", dto.getCode()); // log.info("【抖音图文小程序】用户【{}】授权登录了", dto.getCode());
return AjaxResult.success(tiktokUserService.login(dto)); // return AjaxResult.success(tiktokUserService.login(dto));
// }
@ApiOperation(value="获取抖音小程序用户")
@PostMapping(value = "/getTiktokUserInfo")
public R<LoginTiktokUser> getTiktokLoginUserByLoginParam(@Validated @RequestBody @ApiParam("登录对象") TiktokLoginDto dto){
return tiktokUserService.getTiktokLoginUserByLoginParam(dto);
} }
//@TokenCheck //@TokenCheck

21
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorService.java

@ -1,8 +1,13 @@
package com.bnyer.img.service; package com.bnyer.img.service;
import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.dto.CreatorDto; import com.bnyer.common.core.dto.CreatorDto;
import com.bnyer.common.core.dto.CreatorLoginDto; import com.bnyer.common.core.vo.CreatorLoginVo;
import com.bnyer.img.vo.*; import com.bnyer.img.api.model.LoginCreator;
import com.bnyer.img.vo.CreatorDetailsVo;
import com.bnyer.img.vo.CreatorFansLikeVo;
import com.bnyer.img.vo.CreatorHotVo;
import com.bnyer.img.vo.CreatorVo;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -40,13 +45,13 @@ public interface CreatorService {
* @param param 前端传来的参数 * @param param 前端传来的参数
* @return - * @return -
*/ */
Map<String,Object> login(CreatorLoginDto param); // Map<String,Object> login(CreatorLoginDto param);
/** /**
* 小程序艺术家登出 * 小程序艺术家登出
* @param phone 手机号 * @param phone 手机号
*/ */
boolean logout(String phone); // boolean logout(String phone);
/** /**
* 查询10个热门艺术家列表 * 查询10个热门艺术家列表
@ -102,4 +107,12 @@ public interface CreatorService {
* @return - * @return -
*/ */
CreatorFansLikeVo queryCreatorFansLikeNum(Long creatorId); CreatorFansLikeVo queryCreatorFansLikeNum(Long creatorId);
/**
* 获取登录的艺术家信息
* @param phone 手机号
* @param password 密码
* @return -
*/
R<LoginCreator> getCreatorInfoByPhoneAndPassword(String phone,String password);
} }

13
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/FhUserService.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.FhLoginDto; import com.bnyer.common.core.dto.FhLoginDto;
import com.bnyer.img.api.model.LoginFhUser;
import java.util.Map;
public interface FhUserService { public interface FhUserService {
@ -11,7 +11,7 @@ public interface FhUserService {
* @param dto 登录参数 * @param dto 登录参数
* @return - * @return -
*/ */
Map<String,Object> login(FhLoginDto dto); //Map<String,Object> login(FhLoginDto dto);
/** /**
* 检查某平台用户当日下载次数是否超标 * 检查某平台用户当日下载次数是否超标
@ -21,4 +21,11 @@ public interface FhUserService {
* @return - * @return -
*/ */
boolean checkUserCanDownload(Long userId,String platform,String appType); boolean checkUserCanDownload(Long userId,String platform,String appType);
/**
* 获取快手小程序用户
* @param dto 登录参数
* @return -
*/
R<LoginFhUser> getFhLoginUserByLoginParam(FhLoginDto dto);
} }

23
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/TiktokUserService.java

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

126
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java

@ -7,20 +7,24 @@ 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.Creator; import com.bnyer.common.core.domain.Creator;
import com.bnyer.common.core.domain.InviteLog; import com.bnyer.common.core.domain.InviteLog;
import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.dto.CreatorDto; import com.bnyer.common.core.dto.CreatorDto;
import com.bnyer.common.core.dto.CreatorLoginDto;
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.utils.uuid.IdUtils;
import com.bnyer.common.core.vo.CreatorLoginVo;
import com.bnyer.common.redis.service.RedisService; import com.bnyer.common.redis.service.RedisService;
import com.bnyer.img.api.model.LoginCreator;
import com.bnyer.img.mapper.CreatorMapper; import com.bnyer.img.mapper.CreatorMapper;
import com.bnyer.img.mapper.InviteLogMapper; import com.bnyer.img.mapper.InviteLogMapper;
import com.bnyer.img.mapper.TiktokImgMapper; import com.bnyer.img.mapper.TiktokImgMapper;
import com.bnyer.img.service.CreatorService; import com.bnyer.img.service.CreatorService;
import com.bnyer.img.vo.*; import com.bnyer.img.vo.CreatorDetailsVo;
import com.bnyer.img.vo.CreatorFansLikeVo;
import com.bnyer.img.vo.CreatorHotVo;
import com.bnyer.img.vo.CreatorVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.BeanUtils; 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;
@ -28,7 +32,6 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
/** /**
* @author chengkun * @author chengkun
@ -151,56 +154,56 @@ public class CreatorServiceImpl implements CreatorService {
} }
//
// @Override
// public Map<String, Object> login(CreatorLoginDto dto) {
// LambdaQueryWrapper<Creator> wrapper = new LambdaQueryWrapper<>();
// wrapper.eq(Creator::getPhone, Sm4Util.sm4Encryption(dto.getPhone()));
// wrapper.eq(Creator::getPassword, Sm4Util.sm4Encryption(dto.getPassword()));
// Creator creator = creatorMapper.selectOne(wrapper);
// if(creator == null){
// throw new ServiceException("手机号或密码不正确!",TiktokConstant.TIKTOK_CREATOR_PWD_ERROR);
// }
// if(creator.getStatus().equals("0")){
// throw new ServiceException("当前艺术家暂未审核,请耐心等待或联系客服!",TiktokConstant.TIKTOK_CREATOR_NOT_PASS_ERROR);
// }
// if(creator.getStatus().equals("2")){
// throw new ServiceException("当前艺术家被封禁,请联系客服处理!",TiktokConstant.TIKTOK_CREATOR_BANED_ERROR);
// }
// CreatorLoginVo creatorLoginVo = new CreatorLoginVo();
// BeanUtils.copyProperties(creator, creatorLoginVo);
// creatorLoginVo.setLastLoginTime(new Date());
// //存在则设置会话状态
// String redisKey = RedisKeyConstant.WECHAT_CREATOR_LOGIN_KEY+Sm4Util.sm4Encryption(dto.getPhone());
// //存在该登录态则删除刷新
// if(redisService.hasKey(redisKey)){
// redisService.deleteObject(redisKey);
// }
// StringBuffer sb = new StringBuffer();
// String randomId = IdUtils.fastSimpleUUID();
// sb.append(randomId).append("#").append(Sm4Util.sm4Encryption(dto.getPhone()+randomId));
// //设置登录会话
// Map<String, Object> map = new HashMap<>(2);
// map.put("token", sb.toString());
// map.put("userInfo",creatorLoginVo);
// redisService.setCacheObject(redisKey,map, 10L, TimeUnit.DAYS);
// return map;
// }
@Override // @Override
public Map<String, Object> login(CreatorLoginDto dto) { // public boolean logout(String phone) {
LambdaQueryWrapper<Creator> wrapper = new LambdaQueryWrapper<>(); // //存在则设置会话状态
wrapper.eq(Creator::getPhone, Sm4Util.sm4Encryption(dto.getPhone())); // String redisKey = RedisKeyConstant.WECHAT_CREATOR_LOGIN_KEY+phone;
wrapper.eq(Creator::getPassword, Sm4Util.sm4Encryption(dto.getPassword())); // if(redisService.hasKey(redisKey)){
Creator creator = creatorMapper.selectOne(wrapper); // redisService.deleteObject(redisKey);
if(creator == null){ // log.info("艺术家【{}】注销成功!",phone);
throw new ServiceException("手机号或密码不正确!",TiktokConstant.TIKTOK_CREATOR_PWD_ERROR); // return true;
} // }else{
if(creator.getStatus().equals("0")){ // log.error("艺术家【{}】注销失败!",phone);
throw new ServiceException("当前艺术家暂未审核,请耐心等待或联系客服!",TiktokConstant.TIKTOK_CREATOR_NOT_PASS_ERROR); // return false;
} // }
if(creator.getStatus().equals("2")){ //
throw new ServiceException("当前艺术家被封禁,请联系客服处理!",TiktokConstant.TIKTOK_CREATOR_BANED_ERROR); // }
}
CreatorLoginVo creatorLoginVo = new CreatorLoginVo();
BeanUtils.copyProperties(creator, creatorLoginVo);
creatorLoginVo.setLastLoginTime(new Date());
//存在则设置会话状态
String redisKey = RedisKeyConstant.WECHAT_CREATOR_LOGIN_KEY+Sm4Util.sm4Encryption(dto.getPhone());
//存在该登录态则删除刷新
if(redisService.hasKey(redisKey)){
redisService.deleteObject(redisKey);
}
StringBuffer sb = new StringBuffer();
String randomId = IdUtils.fastSimpleUUID();
sb.append(randomId).append("#").append(Sm4Util.sm4Encryption(dto.getPhone()+randomId));
//设置登录会话
Map<String, Object> map = new HashMap<>(2);
map.put("token", sb.toString());
map.put("userInfo",creatorLoginVo);
redisService.setCacheObject(redisKey,map, 10L, TimeUnit.DAYS);
return map;
}
@Override
public boolean logout(String phone) {
//存在则设置会话状态
String redisKey = RedisKeyConstant.WECHAT_CREATOR_LOGIN_KEY+phone;
if(redisService.hasKey(redisKey)){
redisService.deleteObject(redisKey);
log.info("艺术家【{}】注销成功!",phone);
return true;
}else{
log.error("艺术家【{}】注销失败!",phone);
return false;
}
}
@Override @Override
public List<CreatorHotVo> queryHotCreatorList() { public List<CreatorHotVo> queryHotCreatorList() {
@ -268,4 +271,21 @@ public class CreatorServiceImpl implements CreatorService {
result.setCollectNum(collectNum); result.setCollectNum(collectNum);
return result; return result;
} }
@Override
public R<LoginCreator> getCreatorInfoByPhoneAndPassword(String phone,String password) {
LambdaQueryWrapper<Creator> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Creator::getPhone, Sm4Util.sm4Encryption(phone));
wrapper.eq(Creator::getPassword,Sm4Util.sm4Encryption(password));
wrapper.eq(Creator::getIsShow, "1");
Creator creator = creatorMapper.selectOne(wrapper);
if (StringUtils.isNull(creator)){
throw new ServiceException("该艺术家不存在!",TiktokConstant.TIKTOK_CREATOR_NOT_EXIST);
}
CreatorLoginVo loginVo = new CreatorLoginVo();
BeanUtils.copyProperties(creator, loginVo);
LoginCreator loginCreator = new LoginCreator();
loginCreator.setCreator(loginVo);
return R.ok(loginCreator);
}
} }

84
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/FhUserServiceImpl.java

@ -5,17 +5,20 @@ 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.FhUser; import com.bnyer.common.core.domain.FhUser;
import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.dto.FhLoginDto; import com.bnyer.common.core.dto.FhLoginDto;
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.uuid.IdUtils; import com.bnyer.common.core.vo.FhUserLoginVo;
import com.bnyer.common.redis.service.RedisService; import com.bnyer.common.redis.service.RedisService;
import com.bnyer.img.api.model.LoginFhUser;
import com.bnyer.img.config.FhConfig; import com.bnyer.img.config.FhConfig;
import com.bnyer.img.mapper.FhUserMapper; import com.bnyer.img.mapper.FhUserMapper;
import com.bnyer.img.service.FhUserService; import com.bnyer.img.service.FhUserService;
import com.bnyer.img.vo.FhSessionInfoVo; import com.bnyer.img.vo.FhSessionInfoVo;
import com.bnyer.img.vo.FhUserInfoVo; import com.bnyer.img.vo.FhUserInfoVo;
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.http.HttpEntity; import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
@ -30,9 +33,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
@ -121,35 +121,35 @@ public class FhUserServiceImpl implements FhUserService {
return fhUser; return fhUser;
} }
@Override // @Override
public Map<String, Object> login(FhLoginDto param) { // public Map<String, Object> login(FhLoginDto param) {
FhSessionInfoVo sessionInfo = this.getSessionInfo(param.getCode()); // FhSessionInfoVo sessionInfo = this.getSessionInfo(param.getCode());
//检查数据库中是否存在该openId,存在则直接设置会话状态登录;不存在则新增 // //检查数据库中是否存在该openId,存在则直接设置会话状态登录;不存在则新增
LambdaQueryWrapper<FhUser> wrapper = new LambdaQueryWrapper<>(); // LambdaQueryWrapper<FhUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(sessionInfo.getOpenId() != null,FhUser::getFhCode,Sm4Util.sm4Encryption(sessionInfo.getOpenId())); // wrapper.eq(sessionInfo.getOpenId() != null,FhUser::getFhCode,Sm4Util.sm4Encryption(sessionInfo.getOpenId()));
FhUser fhUser = fhUserMapper.selectOne(wrapper); // FhUser fhUser = fhUserMapper.selectOne(wrapper);
if(fhUser == null){ // if(fhUser == null){
//新用户,新增 // //新用户,新增
fhUser = this.saveOrUpdate(sessionInfo.getOpenId(), sessionInfo.getSessionKey(), param.getEncryptedData(), param.getIv()); // fhUser = this.saveOrUpdate(sessionInfo.getOpenId(), sessionInfo.getSessionKey(), param.getEncryptedData(), param.getIv());
} // }
//设置会话状态 // //设置会话状态
String redisKey = RedisKeyConstant.FH_USER_LOGIN_KEY+Sm4Util.sm4Encryption(sessionInfo.getOpenId()); // String redisKey = RedisKeyConstant.FH_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",fhUser); // map.put("userInfo",fhUser);
//设置登录会话 // //设置登录会话
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 FhUserServiceImpl implements FhUserService {
return false; return false;
} }
} }
@Override
public R<LoginFhUser> getFhLoginUserByLoginParam(FhLoginDto dto) {
FhSessionInfoVo sessionInfo = this.getSessionInfo(dto.getCode());
//检查数据库中是否存在该openId,存在则直接返回结果;不存在则新增
LambdaQueryWrapper<FhUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(sessionInfo.getOpenId() != null,FhUser::getFhCode,Sm4Util.sm4Encryption(sessionInfo.getOpenId()));
FhUser fhUser = fhUserMapper.selectOne(wrapper);
if(fhUser == null){
//新用户,新增
fhUser = this.saveOrUpdate(sessionInfo.getOpenId(), sessionInfo.getSessionKey(), dto.getEncryptedData(), dto.getIv());
}
LoginFhUser loginFhUser = new LoginFhUser();
FhUserLoginVo loginVo = new FhUserLoginVo();
BeanUtils.copyProperties(fhUser,loginVo);
loginFhUser.setFhUser(loginVo);
return R.ok(loginFhUser);
}
} }

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

@ -4,18 +4,21 @@ 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.TiktokUser; import com.bnyer.common.core.domain.TiktokUser;
import com.bnyer.common.core.dto.TiktokLoginDto; import com.bnyer.common.core.dto.TiktokLoginDto;
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.uuid.IdUtils; import com.bnyer.common.core.vo.TiktokUserLoginVo;
import com.bnyer.common.redis.service.RedisService; import com.bnyer.common.redis.service.RedisService;
import com.bnyer.img.api.model.LoginTiktokUser;
import com.bnyer.img.config.TiktokConfig; import com.bnyer.img.config.TiktokConfig;
import com.bnyer.img.mapper.TiktokUserMapper; import com.bnyer.img.mapper.TiktokUserMapper;
import com.bnyer.img.service.TiktokUserService; import com.bnyer.img.service.TiktokUserService;
import com.bnyer.img.vo.TiktokSessionInfoVo; import com.bnyer.img.vo.TiktokSessionInfoVo;
import com.bnyer.img.vo.TiktokUserInfoVo; import com.bnyer.img.vo.TiktokUserInfoVo;
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;
@ -29,7 +32,6 @@ import java.util.Base64;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit;
@Service @Service
@Slf4j @Slf4j
@ -125,35 +127,35 @@ public class TiktokUserServiceImpl implements TiktokUserService {
return user; return user;
} }
@Override // @Override
public Map<String, Object> login(TiktokLoginDto dto) { // public Map<String, Object> login(TiktokLoginDto dto) {
TiktokSessionInfoVo sessionInfo = this.getSessionInfo(dto.getCode()); // TiktokSessionInfoVo sessionInfo = this.getSessionInfo(dto.getCode());
//检查数据库中是否存在该openId,存在则直接设置会话状态登录;不存在则新增 // //检查数据库中是否存在该openId,存在则直接设置会话状态登录;不存在则新增
LambdaQueryWrapper<TiktokUser> wrapper = new LambdaQueryWrapper<>(); // LambdaQueryWrapper<TiktokUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(sessionInfo.getOpenId() != null,TiktokUser::getTiktokCode,Sm4Util.sm4Encryption(sessionInfo.getOpenId())); // wrapper.eq(sessionInfo.getOpenId() != null,TiktokUser::getTiktokCode,Sm4Util.sm4Encryption(sessionInfo.getOpenId()));
TiktokUser tiktokUser = tiktokUserMapper.selectOne(wrapper); // TiktokUser tiktokUser = tiktokUserMapper.selectOne(wrapper);
if(tiktokUser == null){ // if(tiktokUser == null){
//新用户,新增 // //新用户,新增
tiktokUser = this.saveUserInfo(sessionInfo.getOpenId(), sessionInfo.getSessionKey(), dto.getEncryptedData(), dto.getIv()); // tiktokUser = this.saveUserInfo(sessionInfo.getOpenId(), sessionInfo.getSessionKey(), dto.getEncryptedData(), dto.getIv());
} // }
//设置会话状态 // //设置会话状态
String redisKey = RedisKeyConstant.TIKTOK_USER_LOGIN_KEY+Sm4Util.sm4Encryption(sessionInfo.getOpenId()); // String redisKey = RedisKeyConstant.TIKTOK_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",tiktokUser); // map.put("userInfo",tiktokUser);
//设置登录会话 // //设置登录会话
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) {
@ -174,4 +176,22 @@ public class TiktokUserServiceImpl implements TiktokUserService {
return false; return false;
} }
} }
@Override
public R<LoginTiktokUser> getTiktokLoginUserByLoginParam(TiktokLoginDto dto) {
TiktokSessionInfoVo sessionInfo = this.getSessionInfo(dto.getCode());
//检查数据库中是否存在该openId,存在则直接返回结果;不存在则新增
LambdaQueryWrapper<TiktokUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(sessionInfo.getOpenId() != null,TiktokUser::getTiktokCode,Sm4Util.sm4Encryption(sessionInfo.getOpenId()));
TiktokUser tiktokUser = tiktokUserMapper.selectOne(wrapper);
if(tiktokUser == null){
//新用户,新增
tiktokUser = this.saveUserInfo(sessionInfo.getOpenId(), sessionInfo.getSessionKey(), dto.getEncryptedData(), dto.getIv());
}
LoginTiktokUser loginTiktokUser = new LoginTiktokUser();
TiktokUserLoginVo loginVo = new TiktokUserLoginVo();
BeanUtils.copyProperties(tiktokUser,loginVo);
loginTiktokUser.setTiktokUser(loginVo);
return R.ok(loginTiktokUser);
}
} }

Loading…
Cancel
Save