diff --git a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/RemoteImgService.java b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/RemoteImgService.java index 7db8a5d..7cad45e 100644 --- a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/RemoteImgService.java +++ b/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.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.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 org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; @@ -26,4 +32,28 @@ public interface RemoteImgService { */ @PostMapping(value = "/img/mini/creator/insertTiktokImg") public R insertTiktokImg(@Validated @RequestBody @ApiParam("TiktokImg对象") TiktokImgMiniDto dto); + + /** + * 获取艺术家信息 + * @param param 登录数据 + * @return - + */ + @PostMapping(value = "/img/mini/creator/getCreatorInfo") + public R getCreatorInfo(@Validated @ApiParam("艺术家登录数据") @RequestBody CreatorLoginDto param); + + /** + * 获取快手小程序用户信息 + * @param dto 登录数据 + * @return - + */ + @PostMapping(value = "/img/mini/fh/getFhUserInfo") + public R getFhLoginUserByLoginParam(@Validated @RequestBody @ApiParam("登录对象") FhLoginDto dto); + + /** + * 获取抖音小程序用户信息 + * @param dto 登录数据 + * @return - + */ + @PostMapping(value = "/img/mini/tiktok/getTiktokUserInfo") + public R getTiktokLoginUserByLoginParam(@Validated @RequestBody @ApiParam("登录对象") TiktokLoginDto dto); } diff --git a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/factory/RemoteImgFallbackFactory.java b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/factory/RemoteImgFallbackFactory.java index d03a044..b744b2d 100644 --- a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/factory/RemoteImgFallbackFactory.java +++ b/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; 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.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.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; @@ -28,6 +34,21 @@ public class RemoteImgFallbackFactory implements FallbackFactory insertTiktokImg(TiktokImgMiniDto dto) { return R.fail("图片保存失败:" + throwable.getMessage()); } + + @Override + public R getCreatorInfo(CreatorLoginDto param) { + return R.fail("获取艺术家失败:" + throwable.getMessage()); + } + + @Override + public R getFhLoginUserByLoginParam(FhLoginDto dto) { + return R.fail("获取快手小程序用户信息失败:" + throwable.getMessage()); + } + + @Override + public R getTiktokLoginUserByLoginParam(TiktokLoginDto dto) { + return R.fail("获取抖音小程序用户信息失败:" + throwable.getMessage()); + } }; } } diff --git a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/model/LoginCreator.java b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/model/LoginCreator.java new file mode 100644 index 0000000..014a007 --- /dev/null +++ b/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; + + +} diff --git a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/model/LoginFhUser.java b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/model/LoginFhUser.java new file mode 100644 index 0000000..82ec893 --- /dev/null +++ b/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; +} diff --git a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/model/LoginTiktokUser.java b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/model/LoginTiktokUser.java new file mode 100644 index 0000000..a20b638 --- /dev/null +++ b/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; +} diff --git a/bnyer-auth/src/main/java/com/bnyer/auth/controller/CreatorController.java b/bnyer-auth/src/main/java/com/bnyer/auth/controller/CreatorController.java new file mode 100644 index 0000000..4df68a1 --- /dev/null +++ b/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(); + } +} diff --git a/bnyer-auth/src/main/java/com/bnyer/auth/controller/FhUserController.java b/bnyer-auth/src/main/java/com/bnyer/auth/controller/FhUserController.java new file mode 100644 index 0000000..fda1d5b --- /dev/null +++ b/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(); + } +} diff --git a/bnyer-auth/src/main/java/com/bnyer/auth/controller/TiktokUserController.java b/bnyer-auth/src/main/java/com/bnyer/auth/controller/TiktokUserController.java new file mode 100644 index 0000000..07222fc --- /dev/null +++ b/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(); + } +} diff --git a/bnyer-auth/src/main/java/com/bnyer/auth/service/CreatorLoginService.java b/bnyer-auth/src/main/java/com/bnyer/auth/service/CreatorLoginService.java new file mode 100644 index 0000000..c704d53 --- /dev/null +++ b/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 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(); + } + +} \ No newline at end of file diff --git a/bnyer-auth/src/main/java/com/bnyer/auth/service/FhUserLoginService.java b/bnyer-auth/src/main/java/com/bnyer/auth/service/FhUserLoginService.java new file mode 100644 index 0000000..3f16429 --- /dev/null +++ b/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(); + } + +} \ No newline at end of file diff --git a/bnyer-auth/src/main/java/com/bnyer/auth/service/TiktokUserLoginService.java b/bnyer-auth/src/main/java/com/bnyer/auth/service/TiktokUserLoginService.java new file mode 100644 index 0000000..24018be --- /dev/null +++ b/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(); + } + +} \ No newline at end of file diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/annotation/TokenCheck.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/annotation/TokenCheck.java deleted file mode 100644 index 288396d..0000000 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/annotation/TokenCheck.java +++ /dev/null @@ -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 -{ - -} \ No newline at end of file diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/CacheConstants.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/CacheConstants.java index 5ff0dbb..30df82d 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/CacheConstants.java +++ b/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 */ -public class CacheConstants -{ +public class CacheConstants { /** * 缓存有效期,默认720(分钟) */ @@ -18,7 +17,28 @@ public class CacheConstants 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:"; + +} \ No newline at end of file diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/RedisKeyConstant.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/RedisKeyConstant.java index ba7b515..a546a5e 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/RedisKeyConstant.java +++ b/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:"; /** * 微信小程序艺术家邀请键 diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/SecurityConstants.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/SecurityConstants.java index 22558d9..b8e855e 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/SecurityConstants.java +++ b/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 { + //***************************艺术家信息开始************************************ /** * 用户ID字段 */ @@ -41,4 +42,95 @@ public class SecurityConstants * 登录用户 */ 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"; + + //***************************快手用户信息结束************************************ } diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/TokenConstants.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/TokenConstants.java index 9fff517..c0f2800 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/TokenConstants.java +++ b/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 { /** - * 令牌自定义标识 + * Pc端标识 */ 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"; } diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/utils/JwtUtils.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/utils/JwtUtils.java index b550813..4f68a12 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/utils/JwtUtils.java +++ b/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; -import java.util.Map; import com.bnyer.common.core.constant.SecurityConstants; import com.bnyer.common.core.constant.TokenConstants; import com.bnyer.common.core.text.Convert; @@ -8,6 +7,8 @@ import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; +import java.util.Map; + /** * Jwt工具类 * @@ -25,8 +26,7 @@ public class JwtUtils */ public static String createToken(Map claims) { - String token = Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact(); - return token; + return Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact(); } /** @@ -40,6 +40,7 @@ public class JwtUtils return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody(); } + //***************************PC信息开始************************************ /** * 根据令牌获取用户标识 * @@ -53,31 +54,31 @@ public class JwtUtils } /** - * 根据令牌获取用户标识 - * - * @param claims 身份信息 + * 根据令牌获取用户ID + * + * @param token 令牌 * @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 */ - public static String getUserId(String token) + public static String getUserKey(Claims claims) { - Claims claims = parseToken(token); - return getValue(claims, SecurityConstants.DETAILS_USER_ID); + return getValue(claims, SecurityConstants.USER_KEY); } /** * 根据身份信息获取用户ID - * + * * @param claims 身份信息 * @return 用户ID */ @@ -88,7 +89,7 @@ public class JwtUtils /** * 根据令牌获取用户名 - * + * * @param token 令牌 * @return 用户名 */ @@ -100,7 +101,7 @@ public class JwtUtils /** * 根据身份信息获取用户名 - * + * * @param claims 身份信息 * @return 用户名 */ @@ -108,6 +109,218 @@ public class JwtUtils { 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); + } + + //***************************快手用户信息结束************************************ /** * 根据身份信息获取键值 diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorLoginVo.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/CreatorLoginVo.java similarity index 98% rename from bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorLoginVo.java rename to bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/CreatorLoginVo.java index 7032984..1eeb3ed 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorLoginVo.java +++ b/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 io.swagger.annotations.ApiModel; diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/FhUserLoginVo.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/FhUserLoginVo.java new file mode 100644 index 0000000..3fa811b --- /dev/null +++ b/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; +} diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/TiktokUserLoginVo.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/TiktokUserLoginVo.java new file mode 100644 index 0000000..d97d940 --- /dev/null +++ b/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; +} diff --git a/bnyer-common/bnyer-common-security/pom.xml b/bnyer-common/bnyer-common-security/pom.xml index cee519a..da8dcdd 100644 --- a/bnyer-common/bnyer-common-security/pom.xml +++ b/bnyer-common/bnyer-common-security/pom.xml @@ -28,11 +28,20 @@ bnyer-api-system + + com.dimensionalnode bnyer-common-redis + + + com.dimensionalnode + bnyer-api-img + 1.0.0 + compile + diff --git a/bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/config/WebMvcConfig.java b/bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/config/WebMvcConfig.java index cbb377b..4e8c792 100644 --- a/bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/config/WebMvcConfig.java +++ b/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 static final String[] excludeUrls = { "/login", "/logout", "/refresh" }; + public static final String[] excludeUrls = { "/login", "/logout", "/refresh","/creatorLogin", + "/creatorLogout","/fhUserLogin","/fhUserLogout","/wxUserLogout","/wxUserLogin","/tiktokUserLogin","/tiktokUserLogout"}; @Override public void addInterceptors(InterceptorRegistry registry) diff --git a/bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/service/CreatorTokenService.java b/bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/service/CreatorTokenService.java new file mode 100644 index 0000000..a24481c --- /dev/null +++ b/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 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 claimsMap = new HashMap(); + claimsMap.put(SecurityConstants.CREATOR_KEY, token); + claimsMap.put(SecurityConstants.DETAILS_CREATOR_ID, creatorId); + claimsMap.put(SecurityConstants.DETAILS_PHONE, creatorPhone); + + // 接口返回信息 + Map rspMap = new HashMap(); + 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; + } +} \ No newline at end of file diff --git a/bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/service/FhUserTokenService.java b/bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/service/FhUserTokenService.java new file mode 100644 index 0000000..43b4bba --- /dev/null +++ b/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 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 claimsMap = new HashMap(); + 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 rspMap = new HashMap(); + 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; + } +} \ No newline at end of file diff --git a/bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/service/TiktokUserTokenService.java b/bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/service/TiktokUserTokenService.java new file mode 100644 index 0000000..29f2a5f --- /dev/null +++ b/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 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 claimsMap = new HashMap(); + 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 rspMap = new HashMap(); + 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; + } +} \ No newline at end of file diff --git a/bnyer-common/bnyer-common-security/src/main/resources/META-INF/spring.factories b/bnyer-common/bnyer-common-security/src/main/resources/META-INF/spring.factories index ceabe64..19e2667 100644 --- a/bnyer-common/bnyer-common-security/src/main/resources/META-INF/spring.factories +++ b/bnyer-common/bnyer-common-security/src/main/resources/META-INF/spring.factories @@ -1,6 +1,9 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.bnyer.common.security.config.WebMvcConfig,\ 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.InnerAuthAspect,\ com.bnyer.common.security.handler.GlobalExceptionHandler diff --git a/bnyer-gateway/src/main/java/com/bnyer/gateway/filter/AuthFilter.java b/bnyer-gateway/src/main/java/com/bnyer/gateway/filter/AuthFilter.java index 8b30df8..3d85612 100644 --- a/bnyer-gateway/src/main/java/com/bnyer/gateway/filter/AuthFilter.java +++ b/bnyer-gateway/src/main/java/com/bnyer/gateway/filter/AuthFilter.java @@ -1,14 +1,5 @@ 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.HttpStatus; 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.gateway.config.properties.IgnoreWhiteProperties; 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; /** @@ -56,31 +56,144 @@ public class AuthFilter implements GlobalFilter, Ordered { return unauthorizedResponse(exchange, "令牌不能为空"); } - Claims claims = JwtUtils.parseToken(token); - if (claims == null) - { - return unauthorizedResponse(exchange, "令牌已过期或验证不正确!"); - } - String userkey = JwtUtils.getUserKey(claims); - boolean islogin = redisService.hasKey(getTokenKey(userkey)); - if (!islogin) - { - return unauthorizedResponse(exchange, "登录状态已过期"); - } - String userid = JwtUtils.getUserId(claims); - String username = JwtUtils.getUserName(claims); - if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username)) - { + //判断是哪个类型发过来的token + //PC端 + if(request.getHeaders().containsKey(TokenConstants.AUTHENTICATION)){ + Claims claims = JwtUtils.parseToken(token); + if (claims == null) + { + return unauthorizedResponse(exchange, "令牌已过期或验证不正确!"); + } + String userKey = JwtUtils.getUserKey(claims); + boolean isLogin = redisService.hasKey(getUserTokenKey(userKey)); + if (!isLogin) + { + return unauthorizedResponse(exchange, "登录状态已过期"); + } + 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, "令牌验证失败"); } - - // 设置用户信息到请求 - 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) @@ -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; } + /** + * 获取微信艺术家端缓存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 */ private String getToken(ServerHttpRequest request) { - String token = request.getHeaders().getFirst(TokenConstants.AUTHENTICATION); - // 如果前端设置了令牌前缀,则裁剪掉前缀 - if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX)) - { - token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY); + if(request.getHeaders().containsKey(TokenConstants.AUTHENTICATION)) { + String token = request.getHeaders().getFirst(TokenConstants.AUTHENTICATION); + // 如果前端设置了令牌前缀,则裁剪掉前缀 + if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX)) + { + 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 diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java index a6c5a92..bd47b35 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java +++ b/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.JSONObject; 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.web.controller.BaseController; import com.bnyer.common.core.web.domain.AjaxResult; import com.bnyer.common.core.web.page.TableDataInfo; +import com.bnyer.img.api.model.LoginCreator; import com.bnyer.img.service.*; import com.github.pagehelper.PageHelper; import io.swagger.annotations.Api; @@ -346,21 +348,21 @@ public class CreatorMiniController extends BaseController { } //@TokenCheck - @PostMapping("/login") - @ApiOperation("小程序艺术家登录") - public AjaxResult login(@Validated @ApiParam("艺术家数据") @RequestBody CreatorLoginDto param) - { - log.info("小程序艺术家数据参数为:{}", JSON.toJSON(param)); - return AjaxResult.success(creatorService.login(param)); - } +// @PostMapping("/login") +// @ApiOperation("小程序艺术家登录") +// public AjaxResult login(@Validated @ApiParam("艺术家数据") @RequestBody CreatorLoginDto param) +// { +// log.info("小程序艺术家数据参数为:{}", JSON.toJSON(param)); +// return AjaxResult.success(creatorService.login(param)); +// } //@TokenCheck - @PostMapping("/logout") - @ApiOperation("小程序艺术家登出") - public AjaxResult logout(@Validated @ApiParam("艺术家数据") @RequestBody CreatorLogoutDto param) - { - return AjaxResult.success(creatorService.logout(param.getPhone())); - } +// @PostMapping("/logout") +// @ApiOperation("小程序艺术家登出") +// public AjaxResult logout(@Validated @ApiParam("艺术家数据") @RequestBody CreatorLogoutDto param) +// { +// return AjaxResult.success(creatorService.logout(param.getPhone())); +// } //@TokenCheck @GetMapping("/getCreatorInfo/{creatorId}") @@ -370,6 +372,14 @@ public class CreatorMiniController extends BaseController { return AjaxResult.success(creatorService.getCreatorInfo(creatorId)); } + //@TokenCheck + @PostMapping("/getCreatorInfo") + @ApiOperation("获取艺术家信息") + public R getCreatorInfoByPhoneAndPassword(@Validated @ApiParam("艺术家登录数据") @RequestBody CreatorLoginDto param) + { + return creatorService.getCreatorInfoByPhoneAndPassword(param.getPhone(),param.getPassword()); + } + //@TokenCheck @ApiOperation(value="查询艺术家分类图片数量") @GetMapping(value = "/queryCreatorTypeImgNum/{creatorId}") diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/FhMiniController.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/FhMiniController.java index ecda898..fa4e6e9 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/FhMiniController.java +++ b/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.bnyer.common.core.constant.TiktokConstant; 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.exception.ServiceException; import com.bnyer.common.core.web.controller.BaseController; import com.bnyer.common.core.web.domain.AjaxResult; import com.bnyer.common.core.web.page.TableDataInfo; +import com.bnyer.img.api.model.LoginFhUser; import com.bnyer.img.service.*; import com.bnyer.img.vo.CreatorDetailsVo; import com.bnyer.img.vo.CreatorFollowVo; @@ -202,12 +204,19 @@ public class FhMiniController extends BaseController { log.debug("【快手图文小程序】查询是否点赞过参数为:{}", JSON.toJSONString(dto)); return AjaxResult.success(tiktokLikeService.judgeLike(dto.getUserId(),dto.getImgId(),"1")); } +// +// @ApiOperation(value="用户登录") +// @PostMapping(value = "/loginFh") +// public R> loginFh(@Validated @RequestBody @ApiParam("登录对象") FhLoginDto dto){ +// log.info("【快手图文小程序】用户【{}】授权登录了", dto.getCode()); +// return R.ok(fhUserService.login(dto)); +// } + - @ApiOperation(value="用户登录") - @PostMapping(value = "/loginFh") - public AjaxResult loginFh(@Validated @RequestBody @ApiParam("登录对象") FhLoginDto dto){ - log.info("【快手图文小程序】用户【{}】授权登录了", dto.getCode()); - return AjaxResult.success(fhUserService.login(dto)); + @ApiOperation(value="获取快手小程序用户") + @PostMapping(value = "/getFhUserInfo") + public R getFhLoginUserByLoginParam(@Validated @RequestBody @ApiParam("登录对象") FhLoginDto dto){ + return fhUserService.getFhLoginUserByLoginParam(dto); } //@TokenCheck diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/TiktokMiniController.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/TiktokMiniController.java index c3a758f..1482528 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/TiktokMiniController.java +++ b/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.bnyer.common.core.constant.TiktokConstant; 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.exception.ServiceException; import com.bnyer.common.core.web.controller.BaseController; import com.bnyer.common.core.web.domain.AjaxResult; import com.bnyer.common.core.web.page.TableDataInfo; +import com.bnyer.img.api.model.LoginTiktokUser; import com.bnyer.img.service.*; import com.bnyer.img.vo.*; import com.github.pagehelper.PageHelper; @@ -202,11 +204,17 @@ public class TiktokMiniController extends BaseController { return AjaxResult.success(tiktokLikeService.judgeLike(dto.getUserId(),dto.getImgId(),"0")); } - @ApiOperation(value="用户登录") - @PostMapping(value = "/loginTiktok") - public AjaxResult loginTiktok(@Validated @RequestBody @ApiParam("登录对象") TiktokLoginDto dto){ - log.info("【抖音图文小程序】用户【{}】授权登录了", dto.getCode()); - return AjaxResult.success(tiktokUserService.login(dto)); +// @ApiOperation(value="用户登录") +// @PostMapping(value = "/loginTiktok") +// public AjaxResult loginTiktok(@Validated @RequestBody @ApiParam("登录对象") TiktokLoginDto dto){ +// log.info("【抖音图文小程序】用户【{}】授权登录了", dto.getCode()); +// return AjaxResult.success(tiktokUserService.login(dto)); +// } + + @ApiOperation(value="获取抖音小程序用户") + @PostMapping(value = "/getTiktokUserInfo") + public R getTiktokLoginUserByLoginParam(@Validated @RequestBody @ApiParam("登录对象") TiktokLoginDto dto){ + return tiktokUserService.getTiktokLoginUserByLoginParam(dto); } //@TokenCheck diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorService.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorService.java index 94df9bf..84c0e4c 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorService.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorService.java @@ -1,8 +1,13 @@ 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.CreatorLoginDto; -import com.bnyer.img.vo.*; +import com.bnyer.common.core.vo.CreatorLoginVo; +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.Map; @@ -40,13 +45,13 @@ public interface CreatorService { * @param param 前端传来的参数 * @return - */ - Map login(CreatorLoginDto param); +// Map login(CreatorLoginDto param); /** * 小程序艺术家登出 * @param phone 手机号 */ - boolean logout(String phone); +// boolean logout(String phone); /** * 查询10个热门艺术家列表 @@ -102,4 +107,12 @@ public interface CreatorService { * @return - */ CreatorFansLikeVo queryCreatorFansLikeNum(Long creatorId); + + /** + * 获取登录的艺术家信息 + * @param phone 手机号 + * @param password 密码 + * @return - + */ + R getCreatorInfoByPhoneAndPassword(String phone,String password); } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/FhUserService.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/FhUserService.java index 5a8bc9a..1dbd7dd 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/FhUserService.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/FhUserService.java @@ -1,8 +1,8 @@ package com.bnyer.img.service; +import com.bnyer.common.core.domain.R; import com.bnyer.common.core.dto.FhLoginDto; - -import java.util.Map; +import com.bnyer.img.api.model.LoginFhUser; public interface FhUserService { @@ -11,7 +11,7 @@ public interface FhUserService { * @param dto 登录参数 * @return - */ - Map login(FhLoginDto dto); + //Map login(FhLoginDto dto); /** * 检查某平台用户当日下载次数是否超标 @@ -21,4 +21,11 @@ public interface FhUserService { * @return - */ boolean checkUserCanDownload(Long userId,String platform,String appType); + + /** + * 获取快手小程序用户 + * @param dto 登录参数 + * @return - + */ + R getFhLoginUserByLoginParam(FhLoginDto dto); } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/TiktokUserService.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/TiktokUserService.java index dc814b6..3cd9d52 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/TiktokUserService.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/TiktokUserService.java @@ -1,17 +1,17 @@ package com.bnyer.img.service; +import com.bnyer.common.core.domain.R; import com.bnyer.common.core.dto.TiktokLoginDto; - -import java.util.Map; +import com.bnyer.img.api.model.LoginTiktokUser; public interface TiktokUserService { - /** - * 抖音登录参数 - * @param dto 登录参数 - * @return - - */ - Map login(TiktokLoginDto dto); +// /** +// * 抖音登录参数 +// * @param dto 登录参数 +// * @return - +// */ +// Map login(TiktokLoginDto dto); /** * 检查某平台用户当日下载次数是否超标 @@ -21,4 +21,11 @@ public interface TiktokUserService { * @return - */ boolean checkUserCanDownload(Long userId,String platform,String appType); + + /** + * 获取抖音小程序用户 + * @param dto 登录参数 + * @return - + */ + R getTiktokLoginUserByLoginParam(TiktokLoginDto dto); } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java index 82ea553..f6cd1fb 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java +++ b/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.domain.Creator; 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.CreatorLoginDto; import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.utils.Sm4Util; import com.bnyer.common.core.utils.StringUtils; 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.img.api.model.LoginCreator; import com.bnyer.img.mapper.CreatorMapper; import com.bnyer.img.mapper.InviteLogMapper; import com.bnyer.img.mapper.TiktokImgMapper; 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 org.checkerframework.checker.units.qual.C; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -28,7 +32,6 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.*; -import java.util.concurrent.TimeUnit; /** * @author chengkun @@ -151,56 +154,56 @@ public class CreatorServiceImpl implements CreatorService { } +// +// @Override +// public Map login(CreatorLoginDto dto) { +// LambdaQueryWrapper 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 map = new HashMap<>(2); +// map.put("token", sb.toString()); +// map.put("userInfo",creatorLoginVo); +// redisService.setCacheObject(redisKey,map, 10L, TimeUnit.DAYS); +// return map; +// } - @Override - public Map login(CreatorLoginDto dto) { - LambdaQueryWrapper 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 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 +// 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 public List queryHotCreatorList() { @@ -268,4 +271,21 @@ public class CreatorServiceImpl implements CreatorService { result.setCollectNum(collectNum); return result; } + + @Override + public R getCreatorInfoByPhoneAndPassword(String phone,String password) { + LambdaQueryWrapper 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); + } } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/FhUserServiceImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/FhUserServiceImpl.java index 6470b78..9e7a4e3 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/FhUserServiceImpl.java +++ b/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.TiktokConstant; 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.exception.ServiceException; 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.img.api.model.LoginFhUser; import com.bnyer.img.config.FhConfig; import com.bnyer.img.mapper.FhUserMapper; import com.bnyer.img.service.FhUserService; import com.bnyer.img.vo.FhSessionInfoVo; import com.bnyer.img.vo.FhUserInfoVo; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -30,9 +33,6 @@ import javax.crypto.spec.SecretKeySpec; import java.text.SimpleDateFormat; import java.util.Base64; import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.TimeUnit; @Service @Slf4j @@ -121,35 +121,35 @@ public class FhUserServiceImpl implements FhUserService { return fhUser; } - @Override - public Map login(FhLoginDto param) { - FhSessionInfoVo sessionInfo = this.getSessionInfo(param.getCode()); - //检查数据库中是否存在该openId,存在则直接设置会话状态登录;不存在则新增 - LambdaQueryWrapper 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(), param.getEncryptedData(), param.getIv()); - } - //设置会话状态 - String redisKey = RedisKeyConstant.FH_USER_LOGIN_KEY+Sm4Util.sm4Encryption(sessionInfo.getOpenId()); - //存在该登录态则删除刷新 - if(redisService.hasKey(redisKey)){ - redisService.deleteObject(redisKey); - } - StringBuffer sb = new StringBuffer(); - String randomId = IdUtils.fastSimpleUUID(); - sb.append(randomId).append("#").append(sessionInfo.getOpenId()); - - Map map = new HashMap<>(2); - map.put("token", sb.toString()); - map.put("sessionKey", sessionInfo.getSessionKey()); - map.put("userInfo",fhUser); - //设置登录会话 - redisService.setCacheObject(redisKey,map,30L, TimeUnit.DAYS); - return map; - } +// @Override +// public Map login(FhLoginDto param) { +// FhSessionInfoVo sessionInfo = this.getSessionInfo(param.getCode()); +// //检查数据库中是否存在该openId,存在则直接设置会话状态登录;不存在则新增 +// LambdaQueryWrapper 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(), param.getEncryptedData(), param.getIv()); +// } +// //设置会话状态 +// String redisKey = RedisKeyConstant.FH_USER_LOGIN_KEY+Sm4Util.sm4Encryption(sessionInfo.getOpenId()); +// //存在该登录态则删除刷新 +// if(redisService.hasKey(redisKey)){ +// redisService.deleteObject(redisKey); +// } +// StringBuffer sb = new StringBuffer(); +// String randomId = IdUtils.fastSimpleUUID(); +// sb.append(randomId).append("#").append(sessionInfo.getOpenId()); +// +// Map map = new HashMap<>(2); +// map.put("token", sb.toString()); +// map.put("sessionKey", sessionInfo.getSessionKey()); +// map.put("userInfo",fhUser); +// //设置登录会话 +// redisService.setCacheObject(redisKey,map,30L, TimeUnit.DAYS); +// return map; +// } @Override public boolean checkUserCanDownload(Long userId, String platform, String appType) { @@ -170,4 +170,22 @@ public class FhUserServiceImpl implements FhUserService { return false; } } + + @Override + public R getFhLoginUserByLoginParam(FhLoginDto dto) { + FhSessionInfoVo sessionInfo = this.getSessionInfo(dto.getCode()); + //检查数据库中是否存在该openId,存在则直接返回结果;不存在则新增 + LambdaQueryWrapper 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); + } } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokUserServiceImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokUserServiceImpl.java index ded12ea..972bce9 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokUserServiceImpl.java +++ b/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.bnyer.common.core.constant.RedisKeyConstant; 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.dto.TiktokLoginDto; import com.bnyer.common.core.exception.ServiceException; 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.img.api.model.LoginTiktokUser; import com.bnyer.img.config.TiktokConfig; import com.bnyer.img.mapper.TiktokUserMapper; import com.bnyer.img.service.TiktokUserService; import com.bnyer.img.vo.TiktokSessionInfoVo; import com.bnyer.img.vo.TiktokUserInfoVo; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; @@ -29,7 +32,6 @@ import java.util.Base64; import java.util.Date; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.TimeUnit; @Service @Slf4j @@ -125,35 +127,35 @@ public class TiktokUserServiceImpl implements TiktokUserService { return user; } - @Override - public Map login(TiktokLoginDto dto) { - TiktokSessionInfoVo sessionInfo = this.getSessionInfo(dto.getCode()); - //检查数据库中是否存在该openId,存在则直接设置会话状态登录;不存在则新增 - LambdaQueryWrapper 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()); - } - //设置会话状态 - String redisKey = RedisKeyConstant.TIKTOK_USER_LOGIN_KEY+Sm4Util.sm4Encryption(sessionInfo.getOpenId()); - //存在该登录态则删除刷新 - if(redisService.hasKey(redisKey)){ - redisService.deleteObject(redisKey); - } - StringBuffer sb = new StringBuffer(); - String randomId = IdUtils.fastSimpleUUID(); - sb.append(randomId).append("#").append(sessionInfo.getOpenId()); - - Map map = new HashMap<>(2); - map.put("token", sb.toString()); - map.put("sessionKey", sessionInfo.getSessionKey()); - map.put("userInfo",tiktokUser); - //设置登录会话 - redisService.setCacheObject(redisKey,map,30L, TimeUnit.DAYS); - return map; - } +// @Override +// public Map login(TiktokLoginDto dto) { +// TiktokSessionInfoVo sessionInfo = this.getSessionInfo(dto.getCode()); +// //检查数据库中是否存在该openId,存在则直接设置会话状态登录;不存在则新增 +// LambdaQueryWrapper 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()); +// } +// //设置会话状态 +// String redisKey = RedisKeyConstant.TIKTOK_USER_LOGIN_KEY+Sm4Util.sm4Encryption(sessionInfo.getOpenId()); +// //存在该登录态则删除刷新 +// if(redisService.hasKey(redisKey)){ +// redisService.deleteObject(redisKey); +// } +// StringBuffer sb = new StringBuffer(); +// String randomId = IdUtils.fastSimpleUUID(); +// sb.append(randomId).append("#").append(sessionInfo.getOpenId()); +// +// Map map = new HashMap<>(2); +// map.put("token", sb.toString()); +// map.put("sessionKey", sessionInfo.getSessionKey()); +// map.put("userInfo",tiktokUser); +// //设置登录会话 +// redisService.setCacheObject(redisKey,map,30L, TimeUnit.DAYS); +// return map; +// } @Override public boolean checkUserCanDownload(Long userId, String platform, String appType) { @@ -174,4 +176,22 @@ public class TiktokUserServiceImpl implements TiktokUserService { return false; } } + + @Override + public R getTiktokLoginUserByLoginParam(TiktokLoginDto dto) { + TiktokSessionInfoVo sessionInfo = this.getSessionInfo(dto.getCode()); + //检查数据库中是否存在该openId,存在则直接返回结果;不存在则新增 + LambdaQueryWrapper 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); + } }