From 8aa45406fdaaaf4b8c1604d31b65c020d8ff8a0d Mon Sep 17 00:00:00 2001
From: timfruit
Date: Sun, 31 Oct 2021 13:09:55 +0800
Subject: [PATCH 1/7] =?UTF-8?q?=E6=8B=93=E5=B1=95=E6=8E=88=E6=9D=83?=
=?UTF-8?q?=E7=99=BB=E5=BD=95=E6=8A=BD=E5=8F=96=E6=88=90=E5=8D=95=E7=8B=AC?=
=?UTF-8?q?=E7=9A=84starter,=E6=8B=93=E5=B1=95=E9=85=8D=E7=BD=AE=E5=92=8C?=
=?UTF-8?q?=E9=BB=98=E8=AE=A4=E9=85=8D=E7=BD=AE=E9=BD=90=E5=B9=B3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../controller/auth/SysAuthController.java | 4 +-
.../user/SysUserProfileController.java | 4 +-
.../service/auth/impl/SysAuthServiceImpl.java | 17 ++-
.../service/auth/SysAuthServiceImplTest.java | 4 +-
yudao-core-service/pom.xml | 10 +-
...pper.java => SysSocialUserCoreMapper.java} | 3 +-
.../social/SysSocialAuthUserRedisDAO.java | 3 +-
...Service.java => SysSocialCoreService.java} | 10 +-
...mpl.java => SysSocialCoreServiceImpl.java} | 16 +--
.../social/SysSocialCoreServiceTest.java | 19 ++-
yudao-dependencies/pom.xml | 6 +
yudao-framework/pom.xml | 1 +
.../pom.xml | 50 ++++++++
.../config/YudaoSocialAutoConfiguration.java | 29 +++++
.../social/core/YudaoAuthRequestFactory.java | 108 ++++++++++++++++++
.../social/core/enums}/AuthExtendSource.java | 2 +-
.../social/core/model}/AuthExtendToken.java | 5 +-
.../AuthWeChatMiniProgramRequest.java | 34 +++---
.../main/resources/META-INF/spring.factories | 2 +
.../controller/auth/SysAuthController.java | 4 +-
.../service/auth/impl/SysAuthServiceImpl.java | 16 +--
.../src/main/resources/application-dev.yaml | 22 ++--
.../src/main/resources/application-local.yaml | 18 ++-
23 files changed, 288 insertions(+), 99 deletions(-)
rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/social/{SysSocialUserMapper.java => SysSocialUserCoreMapper.java} (89%)
rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/{SysSocialService.java => SysSocialCoreService.java} (91%)
rename yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/impl/{SysSocialServiceImpl.java => SysSocialCoreServiceImpl.java} (93%)
rename yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/social/SysSocialServiceTest.java => yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialCoreServiceTest.java (92%)
create mode 100644 yudao-framework/yudao-spring-boot-starter-biz-social/pom.xml
create mode 100644 yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/config/YudaoSocialAutoConfiguration.java
create mode 100644 yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/YudaoAuthRequestFactory.java
rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth => yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/enums}/AuthExtendSource.java (91%)
rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth => yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/model}/AuthExtendToken.java (71%)
rename {yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth => yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/request}/AuthWeChatMiniProgramRequest.java (67%)
create mode 100644 yudao-framework/yudao-spring-boot-starter-biz-social/src/main/resources/META-INF/spring.factories
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java
index 16130e17e..c557b789a 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java
@@ -9,7 +9,7 @@ import cn.iocoder.yudao.adminserver.modules.system.service.auth.SysAuthService;
import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService;
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
-import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialService;
+import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService;
import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
@@ -50,7 +50,7 @@ public class SysAuthController {
@Resource
private SysPermissionService permissionService;
@Resource
- private SysSocialService socialService;
+ private SysSocialCoreService socialService;
@PostMapping("/login")
@ApiOperation("使用账号密码登录")
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.java
index 48236a7ab..0b85016c1 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.java
@@ -15,7 +15,7 @@ import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleSer
import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO;
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
-import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialService;
+import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService;
import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
@@ -56,7 +56,7 @@ public class SysUserProfileController {
@Resource
private SysRoleService roleService;
@Resource
- private SysSocialService socialService;
+ private SysSocialCoreService socialService;
@GetMapping("/get")
@ApiOperation("获得登录用户信息")
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
index 558967c2e..abb6a3dca 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
@@ -17,7 +17,7 @@ import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO
import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService;
import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
-import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialService;
+import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService;
import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
@@ -73,10 +73,9 @@ public class SysAuthServiceImpl implements SysAuthService {
@Resource
private SysUserSessionCoreService userSessionCoreService;
@Resource
- private SysSocialService socialService;
+ private SysSocialCoreService socialService;
- // TODO @timfruit:静态枚举类,需要都大写,例如说 USER_TYPE_ENUM;静态变量,放在普通变量前面;这个实践不错哈。
- private static final UserTypeEnum userTypeEnum = UserTypeEnum.ADMIN;
+ private static final UserTypeEnum USER_TYPE_ENUM = UserTypeEnum.ADMIN;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
@@ -201,7 +200,7 @@ public class SysAuthServiceImpl implements SysAuthService {
// 如果未绑定 SysSocialUserDO 用户,则无法自动登录,进行报错
String unionId = socialService.getAuthUserUnionId(authUser);
- List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, userTypeEnum);
+ List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, USER_TYPE_ENUM);
if (CollUtil.isEmpty(socialUsers)) {
throw exception(AUTH_THIRD_LOGIN_NOT_BIND);
}
@@ -218,7 +217,7 @@ public class SysAuthServiceImpl implements SysAuthService {
loginUser.setRoleIds(this.getUserRoleIds(loginUser.getId())); // 获取用户角色列表
// 绑定社交用户(更新)
- socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, userTypeEnum);
+ socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, USER_TYPE_ENUM);
// 缓存登录用户到 Redis 中,返回 sessionId 编号
return userSessionCoreService.createUserSession(loginUser, userIp, userAgent);
@@ -235,7 +234,7 @@ public class SysAuthServiceImpl implements SysAuthService {
loginUser.setRoleIds(this.getUserRoleIds(loginUser.getId())); // 获取用户角色列表
// 绑定社交用户(新增)
- socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, userTypeEnum);
+ socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, USER_TYPE_ENUM);
// 缓存登录用户到 Redis 中,返回 sessionId 编号
return userSessionCoreService.createUserSession(loginUser, userIp, userAgent);
@@ -248,7 +247,7 @@ public class SysAuthServiceImpl implements SysAuthService {
Assert.notNull(authUser, "授权用户不为空");
// 绑定社交用户(新增)
- socialService.bindSocialUser(userId, reqVO.getType(), authUser, userTypeEnum);
+ socialService.bindSocialUser(userId, reqVO.getType(), authUser, USER_TYPE_ENUM);
}
@Override
@@ -269,7 +268,7 @@ public class SysAuthServiceImpl implements SysAuthService {
reqDTO.setLogType(SysLoginLogTypeEnum.LOGOUT_SELF.getType());
reqDTO.setTraceId(TracerUtils.getTraceId());
reqDTO.setUserId(userId);
- reqDTO.setUserType(userTypeEnum.getValue());
+ reqDTO.setUserType(USER_TYPE_ENUM.getValue());
reqDTO.setUsername(username);
reqDTO.setUserAgent(ServletUtils.getUserAgent());
reqDTO.setUserIp(ServletUtils.getClientIP());
diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysAuthServiceImplTest.java b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysAuthServiceImplTest.java
index c09a194aa..d8fbec5b2 100644
--- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysAuthServiceImplTest.java
+++ b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysAuthServiceImplTest.java
@@ -11,7 +11,7 @@ import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService;
import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
-import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialService;
+import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService;
import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.security.core.LoginUser;
@@ -66,7 +66,7 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest {
@MockBean
private SysUserSessionCoreService userSessionCoreService;
@MockBean
- private SysSocialService socialService;
+ private SysSocialCoreService socialService;
@Test
public void testLoadUserByUsername_success() {
diff --git a/yudao-core-service/pom.xml b/yudao-core-service/pom.xml
index 4fd85c0aa..c4e79d7a3 100644
--- a/yudao-core-service/pom.xml
+++ b/yudao-core-service/pom.xml
@@ -36,6 +36,10 @@
cn.iocoder.boot
yudao-spring-boot-starter-biz-pay
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-biz-social
+
@@ -96,12 +100,6 @@
guava
-
-
- com.xkcoding.justauth
- justauth-spring-boot-starter
-
-
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/social/SysSocialUserMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/social/SysSocialUserCoreMapper.java
similarity index 89%
rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/social/SysSocialUserMapper.java
rename to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/social/SysSocialUserCoreMapper.java
index ee8db4eac..727c38e67 100644
--- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/social/SysSocialUserMapper.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/social/SysSocialUserCoreMapper.java
@@ -8,9 +8,8 @@ import org.apache.ibatis.annotations.Mapper;
import java.util.Collection;
import java.util.List;
-// TODO @timfruit:SysSocialUserCoreMapper 改名,方便区分
@Mapper
-public interface SysSocialUserMapper extends BaseMapperX {
+public interface SysSocialUserCoreMapper extends BaseMapperX {
default List selectListByTypeAndUnionId(Integer userType, Collection types, String unionId) {
return selectList(new QueryWrapper().eq("user_type", userType)
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/social/SysSocialAuthUserRedisDAO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/social/SysSocialAuthUserRedisDAO.java
index 514281071..0c033f89e 100644
--- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/social/SysSocialAuthUserRedisDAO.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/social/SysSocialAuthUserRedisDAO.java
@@ -10,9 +10,8 @@ import javax.annotation.Resource;
import static cn.iocoder.yudao.coreservice.modules.system.dal.redis.SysRedisKeyCoreConstants.SOCIAL_AUTH_USER;
-// TODO @timfruit,这里的 AuthUser 还是保留全路径,主要想体现出来,不是自己定义的
/**
- * 社交 {@link AuthUser} 的 RedisDAO
+ * 社交 {@link me.zhyd.oauth.model.AuthUser} 的 RedisDAO
*
* @author 芋道源码
*/
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialCoreService.java
similarity index 91%
rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialService.java
rename to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialCoreService.java
index 8a8df27d6..17634b320 100644
--- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialService.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialCoreService.java
@@ -15,8 +15,7 @@ import java.util.List;
*
* @author 芋道源码
*/
-// TODO @timfruit:SysSocialCoreService 改名,方便区分
-public interface SysSocialService {
+public interface SysSocialCoreService {
/**
* 获得社交平台的授权 URL
@@ -50,6 +49,7 @@ public interface SysSocialService {
* @param type 社交平台的类型 {@link SysSocialTypeEnum}
* @param unionId 社交平台的 unionId
* @return 社交用户列表
+ * @param userTypeEnum 全局用户类型
*/
List getAllSocialUserList(Integer type, String unionId, UserTypeEnum userTypeEnum);
@@ -58,6 +58,7 @@ public interface SysSocialService {
*
* @param userId 用户编号
* @return 社交用户列表
+ * @param userTypeEnum 全局用户类型
*/
List getSocialUserList(Long userId, UserTypeEnum userTypeEnum);
@@ -67,6 +68,7 @@ public interface SysSocialService {
* @param userId 用户编号
* @param type 社交平台的类型 {@link SysSocialTypeEnum}
* @param authUser 授权用户
+ * @param userTypeEnum 全局用户类型
*/
void bindSocialUser(Long userId, Integer type, AuthUser authUser, UserTypeEnum userTypeEnum);
@@ -76,8 +78,8 @@ public interface SysSocialService {
* @param userId 用户编号
* @param type 社交平台的类型 {@link SysSocialTypeEnum}
* @param unionId 社交平台的 unionId
+ * @param userTypeEnum 全局用户类型
*/
- void unbindSocialUser(Long userId, Integer type, String unionId,UserTypeEnum userTypeEnum);
- // TODO @timfruit:逗号后面要有空格;缺少了 @userTypeEnum 的注释,都补充下哈。
+ void unbindSocialUser(Long userId, Integer type, String unionId, UserTypeEnum userTypeEnum);
}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/impl/SysSocialServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/impl/SysSocialCoreServiceImpl.java
similarity index 93%
rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/impl/SysSocialServiceImpl.java
rename to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/impl/SysSocialCoreServiceImpl.java
index bde40c3c4..0c3bcca9a 100644
--- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/impl/SysSocialServiceImpl.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/impl/SysSocialCoreServiceImpl.java
@@ -2,15 +2,15 @@ package cn.iocoder.yudao.coreservice.modules.system.service.social.impl;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO;
-import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.social.SysSocialUserMapper;
+import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.social.SysSocialUserCoreMapper;
import cn.iocoder.yudao.coreservice.modules.system.dal.redis.social.SysSocialAuthUserRedisDAO;
import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum;
-import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialService;
+import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
+import cn.iocoder.yudao.framework.social.core.YudaoAuthRequestFactory;
import com.google.common.annotations.VisibleForTesting;
-import com.xkcoding.justauth.AuthRequestFactory;
import lombok.extern.slf4j.Slf4j;
import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.model.AuthResponse;
@@ -38,21 +38,21 @@ import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString
@Service
@Validated
@Slf4j
-public class SysSocialServiceImpl implements SysSocialService {
+public class SysSocialCoreServiceImpl implements SysSocialCoreService {
@Resource
- private AuthRequestFactory authRequestFactory;
+ private YudaoAuthRequestFactory yudaoAuthRequestFactory;
@Resource
private SysSocialAuthUserRedisDAO authSocialUserRedisDAO;
@Resource
- private SysSocialUserMapper socialUserMapper;
+ private SysSocialUserCoreMapper socialUserMapper;
@Override
public String getAuthorizeUrl(Integer type, String redirectUri) {
// 获得对应的 AuthRequest 实现
- AuthRequest authRequest = authRequestFactory.get(SysSocialTypeEnum.valueOfType(type).getSource());
+ AuthRequest authRequest = yudaoAuthRequestFactory.get(SysSocialTypeEnum.valueOfType(type).getSource());
// 生成跳转地址
String authorizeUri = authRequest.authorize(AuthStateUtils.createState());
return HttpUtils.replaceUrlQuery(authorizeUri, "redirect_uri", redirectUri);
@@ -161,7 +161,7 @@ public class SysSocialServiceImpl implements SysSocialService {
* @return 授权的用户
*/
private AuthUser getAuthUser0(Integer type, AuthCallback authCallback) {
- AuthRequest authRequest = authRequestFactory.get(SysSocialTypeEnum.valueOfType(type).getSource());
+ AuthRequest authRequest = yudaoAuthRequestFactory.get(SysSocialTypeEnum.valueOfType(type).getSource());
AuthResponse> authResponse = authRequest.login(authCallback);
log.info("[getAuthUser0][请求社交平台 type({}) request({}) response({})]", type, toJsonString(authCallback),
toJsonString(authResponse));
diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/social/SysSocialServiceTest.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialCoreServiceTest.java
similarity index 92%
rename from yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/social/SysSocialServiceTest.java
rename to yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialCoreServiceTest.java
index cec84c1ed..2a33dd869 100644
--- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/social/SysSocialServiceTest.java
+++ b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialCoreServiceTest.java
@@ -1,11 +1,11 @@
-package cn.iocoder.yudao.adminserver.modules.system.service.social;
+package cn.iocoder.yudao.coreservice.modules.system.service.social;
-import cn.iocoder.yudao.adminserver.BaseDbAndRedisUnitTest;
+import cn.iocoder.yudao.coreservice.BaseDbAndRedisUnitTest;
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO;
-import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.social.SysSocialUserMapper;
+import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.social.SysSocialUserCoreMapper;
import cn.iocoder.yudao.coreservice.modules.system.dal.redis.social.SysSocialAuthUserRedisDAO;
import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum;
-import cn.iocoder.yudao.coreservice.modules.system.service.social.impl.SysSocialServiceImpl;
+import cn.iocoder.yudao.coreservice.modules.system.service.social.impl.SysSocialCoreServiceImpl;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import com.xkcoding.justauth.AuthRequestFactory;
import me.zhyd.oauth.model.AuthUser;
@@ -23,20 +23,19 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
import static org.junit.jupiter.api.Assertions.assertEquals;
-// TODO @timfruit:这个单元测试,挪到 yudao-core-service
/**
- * {@link SysSocialServiceImpl} 的单元测试类
+ * {@link SysSocialCoreServiceImpl} 的单元测试类
*
* @author 芋道源码
*/
-@Import({SysSocialServiceImpl.class, SysSocialAuthUserRedisDAO.class})
-public class SysSocialServiceTest extends BaseDbAndRedisUnitTest {
+@Import({SysSocialCoreServiceImpl.class, SysSocialAuthUserRedisDAO.class})
+public class SysSocialCoreServiceTest extends BaseDbAndRedisUnitTest {
@Resource
- private SysSocialServiceImpl socialService;
+ private SysSocialCoreServiceImpl socialService;
@Resource
- private SysSocialUserMapper socialUserMapper;
+ private SysSocialUserCoreMapper socialUserMapper;
@MockBean
private AuthRequestFactory authRequestFactory;
diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml
index fba394150..b5028e909 100644
--- a/yudao-dependencies/pom.xml
+++ b/yudao-dependencies/pom.xml
@@ -350,6 +350,12 @@
${revision}
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-biz-social
+ ${revision}
+
+
org.projectlombok
lombok
diff --git a/yudao-framework/pom.xml b/yudao-framework/pom.xml
index f3927b3a3..21eb1eabe 100644
--- a/yudao-framework/pom.xml
+++ b/yudao-framework/pom.xml
@@ -31,6 +31,7 @@
yudao-spring-boot-starter-biz-pay
yudao-spring-boot-starter-biz-weixin
yudao-spring-boot-starter-extension
+ yudao-spring-boot-starter-biz-social
yudao-framework
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-social/pom.xml b/yudao-framework/yudao-spring-boot-starter-biz-social/pom.xml
new file mode 100644
index 000000000..7588af0c3
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-social/pom.xml
@@ -0,0 +1,50 @@
+
+
+
+ cn.iocoder.boot
+ yudao-framework
+ ${revision}
+
+ jar
+ 4.0.0
+
+ yudao-spring-boot-starter-biz-social
+ ${artifactId}
+
+
+
+ cn.iocoder.boot
+ yudao-common
+
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+
+ com.xkcoding.justauth
+ justauth-spring-boot-starter
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-redis
+
+
+
+
+
+
\ No newline at end of file
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/config/YudaoSocialAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/config/YudaoSocialAutoConfiguration.java
new file mode 100644
index 000000000..a6c468af5
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/config/YudaoSocialAutoConfiguration.java
@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.framework.social.config;
+
+import cn.iocoder.yudao.framework.social.core.YudaoAuthRequestFactory;
+import com.xkcoding.justauth.autoconfigure.JustAuthProperties;
+import lombok.extern.slf4j.Slf4j;
+import me.zhyd.oauth.cache.AuthStateCache;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 社交自动装配类
+ *
+ * @author timfruit
+ * @date 2021-10-30
+ */
+@Slf4j
+@Configuration
+@EnableConfigurationProperties(JustAuthProperties.class)
+public class YudaoSocialAutoConfiguration {
+
+ @Bean
+ @ConditionalOnProperty(prefix = "justauth", value = "enabled", havingValue = "true", matchIfMissing = true)
+ public YudaoAuthRequestFactory yudaoAuthRequestFactory(JustAuthProperties properties, AuthStateCache authStateCache) {
+ return new YudaoAuthRequestFactory(properties, authStateCache);
+ }
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/YudaoAuthRequestFactory.java b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/YudaoAuthRequestFactory.java
new file mode 100644
index 000000000..998c70a12
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/YudaoAuthRequestFactory.java
@@ -0,0 +1,108 @@
+package cn.iocoder.yudao.framework.social.core;
+
+import cn.hutool.core.util.EnumUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.framework.social.core.enums.AuthExtendSource;
+import cn.iocoder.yudao.framework.social.core.request.AuthWeChatMiniProgramRequest;
+import com.xkcoding.http.config.HttpConfig;
+import com.xkcoding.justauth.AuthRequestFactory;
+import com.xkcoding.justauth.autoconfigure.JustAuthProperties;
+import me.zhyd.oauth.cache.AuthStateCache;
+import me.zhyd.oauth.config.AuthConfig;
+import me.zhyd.oauth.config.AuthSource;
+import me.zhyd.oauth.request.AuthRequest;
+import org.springframework.util.CollectionUtils;
+
+import java.net.InetSocketAddress;
+import java.net.Proxy;
+import java.util.Map;
+
+/**
+ * 第三方授权拓展request工厂类
+ *
+ * @author timfruit
+ * @date 2021-10-31
+ */
+public class YudaoAuthRequestFactory extends AuthRequestFactory {
+ protected JustAuthProperties properties;
+ protected AuthStateCache authStateCache;
+
+ public YudaoAuthRequestFactory(JustAuthProperties properties, AuthStateCache authStateCache) {
+ super(properties, authStateCache);
+ this.properties = properties;
+ this.authStateCache = authStateCache;
+ }
+
+ /**
+ * 返回AuthRequest对象
+ *
+ * @param source {@link AuthSource}
+ * @return {@link AuthRequest}
+ */
+ public AuthRequest get(String source) {
+ //先尝试获取自定义扩展的
+ AuthRequest authRequest = getExtendRequest(source);
+
+ if (authRequest == null) {
+ authRequest = super.get(source);
+ }
+
+ return authRequest;
+ }
+
+
+ protected AuthRequest getExtendRequest(String source) {
+ AuthExtendSource authExtendSource;
+
+ try {
+ authExtendSource = EnumUtil.fromString(AuthExtendSource.class, source.toUpperCase());
+ } catch (IllegalArgumentException e) {
+ // 无自定义匹配
+ return null;
+ }
+
+ // 拓展配置和默认配置齐平,properties放在一起
+ AuthConfig config = properties.getType().get(authExtendSource.name());
+ // 找不到对应关系,直接返回空
+ if (config == null) {
+ return null;
+ }
+
+ // 配置 http config
+ configureHttpConfig(authExtendSource.name(), config, properties.getHttpConfig());
+
+ switch (authExtendSource) {
+ case WECHAT_MINI_PROGRAM:
+ return new AuthWeChatMiniProgramRequest(config, authStateCache);
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * 配置 http 相关的配置
+ *
+ * @param authSource {@link AuthSource}
+ * @param authConfig {@link AuthConfig}
+ */
+ protected void configureHttpConfig(String authSource, AuthConfig authConfig, JustAuthProperties.JustAuthHttpConfig httpConfig) {
+ if (null == httpConfig) {
+ return;
+ }
+ Map proxyConfigMap = httpConfig.getProxy();
+ if (CollectionUtils.isEmpty(proxyConfigMap)) {
+ return;
+ }
+ JustAuthProperties.JustAuthProxyConfig proxyConfig = proxyConfigMap.get(authSource);
+
+ if (null == proxyConfig) {
+ return;
+ }
+
+ authConfig.setHttpConfig(HttpConfig.builder()
+ .timeout(httpConfig.getTimeout())
+ .proxy(new Proxy(Proxy.Type.valueOf(proxyConfig.getType()), new InetSocketAddress(proxyConfig.getHostname(), proxyConfig.getPort())))
+ .build());
+ }
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthExtendSource.java b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/enums/AuthExtendSource.java
similarity index 91%
rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthExtendSource.java
rename to yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/enums/AuthExtendSource.java
index e005114ac..bd19b8d06 100644
--- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthExtendSource.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/enums/AuthExtendSource.java
@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.coreservice.modules.system.compent.justauth;
+package cn.iocoder.yudao.framework.social.core.enums;
import me.zhyd.oauth.config.AuthSource;
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthExtendToken.java b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/model/AuthExtendToken.java
similarity index 71%
rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthExtendToken.java
rename to yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/model/AuthExtendToken.java
index 2ecb0d461..3397a4976 100644
--- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthExtendToken.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/model/AuthExtendToken.java
@@ -1,10 +1,11 @@
-package cn.iocoder.yudao.coreservice.modules.system.compent.justauth;
+package cn.iocoder.yudao.framework.social.core.model;
import lombok.*;
import me.zhyd.oauth.model.AuthToken;
/**
- * TODO @timfruit:类注释
+ * 授权所需的token 拓展类
+ *
* @author timfruit
* @date 2021-10-29
*/
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthWeChatMiniProgramRequest.java b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/request/AuthWeChatMiniProgramRequest.java
similarity index 67%
rename from yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthWeChatMiniProgramRequest.java
rename to yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/request/AuthWeChatMiniProgramRequest.java
index 664f9157f..a875c3b6e 100644
--- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthWeChatMiniProgramRequest.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/request/AuthWeChatMiniProgramRequest.java
@@ -1,6 +1,9 @@
-package cn.iocoder.yudao.coreservice.modules.system.compent.justauth;
+package cn.iocoder.yudao.framework.social.core.request;
-import com.alibaba.fastjson.JSONObject;
+import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
+import cn.iocoder.yudao.framework.social.core.enums.AuthExtendSource;
+import cn.iocoder.yudao.framework.social.core.model.AuthExtendToken;
+import lombok.Data;
import me.zhyd.oauth.cache.AuthStateCache;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.exception.AuthException;
@@ -11,9 +14,6 @@ import me.zhyd.oauth.request.AuthDefaultRequest;
import me.zhyd.oauth.utils.HttpUtils;
import me.zhyd.oauth.utils.UrlBuilder;
-// TODO @timfruit:新建一个 yudao-spring-boot-starter-biz-social 包,把这个拓展拿进去哈。另外,可以思考下。
-// 1. application-local.yaml 的配置里,justauth.extend.enum-class 能否不配置,而是自动配置好
-// 2. application-local.yaml 的配置里,justauth.extend.extend.config.WECHAT_MINI_PROGRAM 有办法和 justauth.type.WECHAT_MP 持平
/**
* 微信小程序登陆
*
@@ -34,14 +34,14 @@ public class AuthWeChatMiniProgramRequest extends AuthDefaultRequest {
protected AuthToken getAccessToken(AuthCallback authCallback) {
// https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html
String response = new HttpUtils(config.getHttpConfig()).get(accessTokenUrl(authCallback.getCode()));
- JSONObject accessTokenObject = JSONObject.parseObject(response); // TODO @timfruit:使用 JsonUtils,项目尽量避免直接使用某个 json 库
+ CodeSessionResponse accessTokenObject = JsonUtils.parseObject(response, CodeSessionResponse.class);
this.checkResponse(accessTokenObject);
AuthExtendToken token = new AuthExtendToken();
- token.setMiniSessionKey(accessTokenObject.getString("session_key"));
- token.setOpenId(accessTokenObject.getString("openid"));
- token.setUnionId(accessTokenObject.getString("unionid"));
+ token.setMiniSessionKey(accessTokenObject.session_key);
+ token.setOpenId(accessTokenObject.openid);
+ token.setUnionId(accessTokenObject.unionid);
return token;
}
@@ -64,10 +64,9 @@ public class AuthWeChatMiniProgramRequest extends AuthDefaultRequest {
*
* @param object 请求响应内容
*/
- private void checkResponse(JSONObject object) {
- int code = object.getIntValue("errcode");
- if(code != 0){ // TODO @timfruit:if (code != 0) { ,注意空格
- throw new AuthException(object.getIntValue("errcode"), object.getString("errmsg"));
+ private void checkResponse(CodeSessionResponse object) {
+ if (object.errcode != 0) {
+ throw new AuthException(object.errcode, object.errmsg);
}
}
@@ -87,4 +86,13 @@ public class AuthWeChatMiniProgramRequest extends AuthDefaultRequest {
.build();
}
+ @Data
+ private static class CodeSessionResponse {
+ private int errcode;
+ private String errmsg;
+ private String session_key;
+ private String openid;
+ private String unionid;
+ }
+
}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/resources/META-INF/spring.factories b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/resources/META-INF/spring.factories
new file mode 100644
index 000000000..dcd4dcf71
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,2 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+ cn.iocoder.yudao.framework.social.config.YudaoSocialAutoConfiguration
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java
index 6d18d53be..fbca500f7 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java
@@ -1,6 +1,6 @@
package cn.iocoder.yudao.userserver.modules.system.controller.auth;
-import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialService;
+import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.*;
@@ -36,7 +36,7 @@ public class SysAuthController {
@Resource
private SysSmsCodeService smsCodeService;
@Resource
- private SysSocialService socialService;
+ private SysSocialCoreService socialService;
@PostMapping("/login")
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
index 2394cd03a..e4b938861 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
@@ -9,7 +9,7 @@ import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginResultEn
import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService;
import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
-import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialService;
+import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialCoreService;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
@@ -64,8 +64,8 @@ public class SysAuthServiceImpl implements SysAuthService {
@Resource
private SysUserSessionCoreService userSessionCoreService;
@Resource
- private SysSocialService socialService;
- private static final UserTypeEnum userTypeEnum = UserTypeEnum.MEMBER;
+ private SysSocialCoreService socialService;
+ private static final UserTypeEnum USER_TYPE_ENUM = UserTypeEnum.MEMBER;
@Override
public UserDetails loadUserByUsername(String mobile) throws UsernameNotFoundException {
@@ -114,7 +114,7 @@ public class SysAuthServiceImpl implements SysAuthService {
// 如果未绑定 SysSocialUserDO 用户,则无法自动登录,进行报错
String unionId = socialService.getAuthUserUnionId(authUser);
- List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, userTypeEnum);
+ List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, USER_TYPE_ENUM);
if (CollUtil.isEmpty(socialUsers)) {
throw exception(AUTH_THIRD_LOGIN_NOT_BIND);
}
@@ -130,7 +130,7 @@ public class SysAuthServiceImpl implements SysAuthService {
LoginUser loginUser = SysAuthConvert.INSTANCE.convert(user);
// 绑定社交用户(更新)
- socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, userTypeEnum);
+ socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, USER_TYPE_ENUM);
// 缓存登录用户到 Redis 中,返回 sessionId 编号
return userSessionCoreService.createUserSession(loginUser, userIp, userAgent);
@@ -147,7 +147,7 @@ public class SysAuthServiceImpl implements SysAuthService {
// loginUser.setRoleIds(this.getUserRoleIds(loginUser.getId())); // 获取用户角色列表
// 绑定社交用户(新增)
- socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, userTypeEnum);
+ socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, USER_TYPE_ENUM);
// 缓存登录用户到 Redis 中,返回 sessionId 编号
return userSessionCoreService.createUserSession(loginUser, userIp, userAgent);
@@ -160,7 +160,7 @@ public class SysAuthServiceImpl implements SysAuthService {
org.springframework.util.Assert.notNull(authUser, "授权用户不为空");
// 绑定社交用户(新增)
- socialService.bindSocialUser(userId, reqVO.getType(), authUser, userTypeEnum);
+ socialService.bindSocialUser(userId, reqVO.getType(), authUser, USER_TYPE_ENUM);
}
private LoginUser login0(String username, String password) {
@@ -271,7 +271,7 @@ public class SysAuthServiceImpl implements SysAuthService {
reqDTO.setLogType(SysLoginLogTypeEnum.LOGOUT_SELF.getType());
reqDTO.setTraceId(TracerUtils.getTraceId());
reqDTO.setUserId(userId);
- reqDTO.setUserType(userTypeEnum.getValue());
+ reqDTO.setUserType(USER_TYPE_ENUM.getValue());
reqDTO.setUsername(username);
reqDTO.setUserAgent(ServletUtils.getUserAgent());
reqDTO.setUserIp(ServletUtils.getClientIP());
diff --git a/yudao-user-server/src/main/resources/application-dev.yaml b/yudao-user-server/src/main/resources/application-dev.yaml
index 858e97739..20e0056b1 100644
--- a/yudao-user-server/src/main/resources/application-dev.yaml
+++ b/yudao-user-server/src/main/resources/application-dev.yaml
@@ -145,24 +145,16 @@ yudao:
justauth:
enabled: true
- type: # TODO @timfruit:GITEE、DINGTALK、WECHAT_ENTERPRISE 这个几个,对于用户端是不需要的哈,可以删除噢
- GITEE: # Gitee
- client-id: ee61f0374a4c6c404a8717094caa7a410d76950e45ff60348015830c519ba5c1
- client-secret: 7c044a5671be3b051414db0cf2cec6ad702dd298d2416ba24ceaf608e6fa26f9
- ignore-check-redirect-uri: true
- DINGTALK: # 钉钉
- client-id: dingvrnreaje3yqvzhxg
- client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI
- ignore-check-redirect-uri: true
- WECHAT_ENTERPRISE: # 企业微信
- client-id: wwd411c69a39ad2e54
- client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw
- agent-id: 1000004
- ignore-check-redirect-uri: true
- WECHAT_MP: # 微信公众平台 - H5 https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
+ type:
+ WECHAT_MP: # 微信公众平台 - 移动端 H5 https://www.yuque.com/docs/share/a795bef6-ee8a-494a-8dc4-2ef41927743b?#%20%E3%80%8A%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E6%B5%8B%E8%AF%95%E3%80%8B
client-id: wxa5a05b85ac361f96
client-secret: 247073c7cebb67f27f0e769195c2a57e
ignore-check-redirect-uri: true
+ WECHAT_MINI_PROGRAM: # 微信小程序 https://www.yuque.com/docs/share/88e3d30a-6830-45fc-8c25-dae485aef3aa?#%20%E3%80%8A%E5%B0%8F%E7%A8%8B%E5%BA%8F%E6%8E%88%E6%9D%83%E7%99%BB%E5%BD%95%E3%80%8B
+ client-id: wx44d047d87e6284d8
+ client-secret: 21c3b7a8a51ee1b8f5cf875848ed4466
+ ignore-check-redirect-uri: true
+ ignore-check-state: true
cache:
type: REDIS
prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
diff --git a/yudao-user-server/src/main/resources/application-local.yaml b/yudao-user-server/src/main/resources/application-local.yaml
index c39a7cb1b..3fc985282 100644
--- a/yudao-user-server/src/main/resources/application-local.yaml
+++ b/yudao-user-server/src/main/resources/application-local.yaml
@@ -165,17 +165,13 @@ justauth:
# client-id: wx5b23ba7a5589ecbb # TODO 芋艿:自己的测试,后续可以删除
# client-secret: 2a7b3b20c537e52e74afd395eb85f61f
ignore-check-redirect-uri: true
- extend:
- enum-class: cn.iocoder.yudao.coreservice.modules.system.compent.justauth.AuthExtendSource
- config:
- WECHAT_MINI_PROGRAM: # 微信小程序 https://www.yuque.com/docs/share/88e3d30a-6830-45fc-8c25-dae485aef3aa?#%20%E3%80%8A%E5%B0%8F%E7%A8%8B%E5%BA%8F%E6%8E%88%E6%9D%83%E7%99%BB%E5%BD%95%E3%80%8B
- request-class: cn.iocoder.yudao.coreservice.modules.system.compent.justauth.AuthWeChatMiniProgramRequest
- client-id: wx44d047d87e6284d8
- client-secret: 21c3b7a8a51ee1b8f5cf875848ed4466
-# client-id: wx63c280fe3248a3e7 # TODO 芋艿:自己的测试,后续可以删除
-# client-secret: 6f270509224a7ae1296bbf1c8cb97aed
- ignore-check-redirect-uri: true
- ignore-check-state: true
+ WECHAT_MINI_PROGRAM: # 微信小程序 https://www.yuque.com/docs/share/88e3d30a-6830-45fc-8c25-dae485aef3aa?#%20%E3%80%8A%E5%B0%8F%E7%A8%8B%E5%BA%8F%E6%8E%88%E6%9D%83%E7%99%BB%E5%BD%95%E3%80%8B
+ client-id: wx44d047d87e6284d8
+ client-secret: 21c3b7a8a51ee1b8f5cf875848ed4466
+ # client-id: wx63c280fe3248a3e7 # TODO 芋艿:自己的测试,后续可以删除
+ # client-secret: 6f270509224a7ae1296bbf1c8cb97aed
+ ignore-check-redirect-uri: true
+ ignore-check-state: true
cache:
type: REDIS
prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
From 65abc667b03086fe321fe13f0149fad61058a994 Mon Sep 17 00:00:00 2001
From: YunaiV
Date: Tue, 2 Nov 2021 08:12:37 +0800
Subject: [PATCH 2/7] =?UTF-8?q?code=20review=20=E7=A4=BE=E4=BA=A4=E7=99=BB?=
=?UTF-8?q?=E9=99=86=E7=9B=B8=E5=85=B3=E7=9A=84=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../modules/system/controller/auth/SysAuthController.java | 6 +++---
.../framework/social/core/YudaoAuthRequestFactory.java | 8 +++++---
.../framework/social/core/enums/AuthExtendSource.java | 3 +--
.../framework/social/core/model/AuthExtendToken.java | 4 ++--
.../social/core/request/AuthWeChatMiniProgramRequest.java | 1 +
.../system/service/auth/impl/SysAuthServiceImpl.java | 2 +-
6 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java
index c557b789a..aef8cc40a 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java
@@ -50,7 +50,7 @@ public class SysAuthController {
@Resource
private SysPermissionService permissionService;
@Resource
- private SysSocialCoreService socialService;
+ private SysSocialCoreService socialCoreService;
@PostMapping("/login")
@ApiOperation("使用账号密码登录")
@@ -102,7 +102,7 @@ public class SysAuthController {
})
public CommonResult socialAuthRedirect(@RequestParam("type") Integer type,
@RequestParam("redirectUri") String redirectUri) {
- return CommonResult.success(socialService.getAuthorizeUrl(type, redirectUri));
+ return CommonResult.success(socialCoreService.getAuthorizeUrl(type, redirectUri));
}
@PostMapping("/social-login")
@@ -133,7 +133,7 @@ public class SysAuthController {
@DeleteMapping("/social-unbind")
@ApiOperation("取消社交绑定")
public CommonResult socialUnbind(@RequestBody SysAuthSocialUnbindReqVO reqVO) {
- socialService.unbindSocialUser(getLoginUserId(), reqVO.getType(), reqVO.getUnionId(), UserTypeEnum.ADMIN);
+ socialCoreService.unbindSocialUser(getLoginUserId(), reqVO.getType(), reqVO.getUnionId(), UserTypeEnum.ADMIN);
return CommonResult.success(true);
}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/YudaoAuthRequestFactory.java b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/YudaoAuthRequestFactory.java
index 998c70a12..17c36b683 100644
--- a/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/YudaoAuthRequestFactory.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/YudaoAuthRequestFactory.java
@@ -1,7 +1,6 @@
package cn.iocoder.yudao.framework.social.core;
import cn.hutool.core.util.EnumUtil;
-import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.social.core.enums.AuthExtendSource;
import cn.iocoder.yudao.framework.social.core.request.AuthWeChatMiniProgramRequest;
import com.xkcoding.http.config.HttpConfig;
@@ -18,12 +17,14 @@ import java.net.Proxy;
import java.util.Map;
/**
- * 第三方授权拓展request工厂类
+ * 第三方授权拓展 request 工厂类
+ * TODO @timfruit 可以说明下,为啥有了 AuthRequestFactory 类,咱还需要自定义
*
* @author timfruit
* @date 2021-10-31
*/
public class YudaoAuthRequestFactory extends AuthRequestFactory {
+
protected JustAuthProperties properties;
protected AuthStateCache authStateCache;
@@ -34,7 +35,7 @@ public class YudaoAuthRequestFactory extends AuthRequestFactory {
}
/**
- * 返回AuthRequest对象
+ * 返回 AuthRequest 对象
*
* @param source {@link AuthSource}
* @return {@link AuthRequest}
@@ -86,6 +87,7 @@ public class YudaoAuthRequestFactory extends AuthRequestFactory {
* @param authConfig {@link AuthConfig}
*/
protected void configureHttpConfig(String authSource, AuthConfig authConfig, JustAuthProperties.JustAuthHttpConfig httpConfig) {
+ // TODO @timfruit:可以改成反射调用父类的方法。可能有一定的损耗,但是可以忽略不计的
if (null == httpConfig) {
return;
}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/enums/AuthExtendSource.java b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/enums/AuthExtendSource.java
index bd19b8d06..fd6bb9cb9 100644
--- a/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/enums/AuthExtendSource.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/enums/AuthExtendSource.java
@@ -2,6 +2,7 @@ package cn.iocoder.yudao.framework.social.core.enums;
import me.zhyd.oauth.config.AuthSource;
+// TODO @timfruit:类注释
public enum AuthExtendSource implements AuthSource {
/**
@@ -28,6 +29,4 @@ public enum AuthExtendSource implements AuthSource {
}
}
- ;
-
}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/model/AuthExtendToken.java b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/model/AuthExtendToken.java
index 3397a4976..2c0f4f403 100644
--- a/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/model/AuthExtendToken.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/model/AuthExtendToken.java
@@ -4,7 +4,7 @@ import lombok.*;
import me.zhyd.oauth.model.AuthToken;
/**
- * 授权所需的token 拓展类
+ * 授权所需的 token 拓展类
*
* @author timfruit
* @date 2021-10-29
@@ -16,7 +16,7 @@ import me.zhyd.oauth.model.AuthToken;
public class AuthExtendToken extends AuthToken {
/**
- * 微信小程序 会话密钥
+ * 微信小程序 - 会话密钥
*/
private String miniSessionKey;
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/request/AuthWeChatMiniProgramRequest.java b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/request/AuthWeChatMiniProgramRequest.java
index a875c3b6e..ae9a8e1ec 100644
--- a/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/request/AuthWeChatMiniProgramRequest.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/request/AuthWeChatMiniProgramRequest.java
@@ -86,6 +86,7 @@ public class AuthWeChatMiniProgramRequest extends AuthDefaultRequest {
.build();
}
+ // TODO @timfruit:我们要采用驼峰的命名方式。不匹配的,可以通过 jackson 的自定义注解映射
@Data
private static class CodeSessionResponse {
private int errcode;
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
index e4b938861..6ce205107 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
@@ -65,7 +65,7 @@ public class SysAuthServiceImpl implements SysAuthService {
private SysUserSessionCoreService userSessionCoreService;
@Resource
private SysSocialCoreService socialService;
- private static final UserTypeEnum USER_TYPE_ENUM = UserTypeEnum.MEMBER;
+ private static final UserTypeEnum USER_TYPE_ENUM = UserTypeEnum.MEMBER; // TODO @timfruit 挪到类的最前面。一般是 静态变量,到成员变量的顺序。
@Override
public UserDetails loadUserByUsername(String mobile) throws UsernameNotFoundException {
From 13a94050822b0862eca917ccb981a997e10fca57 Mon Sep 17 00:00:00 2001
From: timfruit
Date: Fri, 5 Nov 2021 23:14:51 +0800
Subject: [PATCH 3/7] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=87=8A?=
=?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../service/auth/impl/SysAuthServiceImpl.java | 3 +-
.../social/core/YudaoAuthRequestFactory.java | 41 ++++---------------
.../social/core/enums/AuthExtendSource.java | 6 ++-
.../request/AuthWeChatMiniProgramRequest.java | 7 ++--
.../service/auth/impl/SysAuthServiceImpl.java | 4 +-
5 files changed, 21 insertions(+), 40 deletions(-)
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
index abb6a3dca..3552dd9a4 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
@@ -56,6 +56,8 @@ import static java.util.Collections.singleton;
@Slf4j
public class SysAuthServiceImpl implements SysAuthService {
+ private static final UserTypeEnum USER_TYPE_ENUM = UserTypeEnum.ADMIN;
+
@Resource
@Lazy // 延迟加载,因为存在相互依赖的问题
private AuthenticationManager authenticationManager;
@@ -75,7 +77,6 @@ public class SysAuthServiceImpl implements SysAuthService {
@Resource
private SysSocialCoreService socialService;
- private static final UserTypeEnum USER_TYPE_ENUM = UserTypeEnum.ADMIN;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/YudaoAuthRequestFactory.java b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/YudaoAuthRequestFactory.java
index 17c36b683..26e23b9d7 100644
--- a/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/YudaoAuthRequestFactory.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/YudaoAuthRequestFactory.java
@@ -1,24 +1,21 @@
package cn.iocoder.yudao.framework.social.core;
import cn.hutool.core.util.EnumUtil;
+import cn.hutool.core.util.ReflectUtil;
import cn.iocoder.yudao.framework.social.core.enums.AuthExtendSource;
import cn.iocoder.yudao.framework.social.core.request.AuthWeChatMiniProgramRequest;
-import com.xkcoding.http.config.HttpConfig;
import com.xkcoding.justauth.AuthRequestFactory;
import com.xkcoding.justauth.autoconfigure.JustAuthProperties;
import me.zhyd.oauth.cache.AuthStateCache;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.config.AuthSource;
import me.zhyd.oauth.request.AuthRequest;
-import org.springframework.util.CollectionUtils;
-import java.net.InetSocketAddress;
-import java.net.Proxy;
-import java.util.Map;
+import java.lang.reflect.Method;
/**
* 第三方授权拓展 request 工厂类
- * TODO @timfruit 可以说明下,为啥有了 AuthRequestFactory 类,咱还需要自定义
+ * (为使得拓展配置和默认配置齐平,自定义本工厂类)
*
* @author timfruit
* @date 2021-10-31
@@ -70,7 +67,10 @@ public class YudaoAuthRequestFactory extends AuthRequestFactory {
}
// 配置 http config
- configureHttpConfig(authExtendSource.name(), config, properties.getHttpConfig());
+ Method method = ReflectUtil.getMethod(AuthRequestFactory.class, "configureHttpConfig",
+ String.class, AuthConfig.class, JustAuthProperties.JustAuthHttpConfig.class);
+ ReflectUtil.invoke(this, method,
+ authExtendSource.name(), config, properties.getHttpConfig());
switch (authExtendSource) {
case WECHAT_MINI_PROGRAM:
@@ -80,31 +80,4 @@ public class YudaoAuthRequestFactory extends AuthRequestFactory {
}
}
- /**
- * 配置 http 相关的配置
- *
- * @param authSource {@link AuthSource}
- * @param authConfig {@link AuthConfig}
- */
- protected void configureHttpConfig(String authSource, AuthConfig authConfig, JustAuthProperties.JustAuthHttpConfig httpConfig) {
- // TODO @timfruit:可以改成反射调用父类的方法。可能有一定的损耗,但是可以忽略不计的
- if (null == httpConfig) {
- return;
- }
- Map proxyConfigMap = httpConfig.getProxy();
- if (CollectionUtils.isEmpty(proxyConfigMap)) {
- return;
- }
- JustAuthProperties.JustAuthProxyConfig proxyConfig = proxyConfigMap.get(authSource);
-
- if (null == proxyConfig) {
- return;
- }
-
- authConfig.setHttpConfig(HttpConfig.builder()
- .timeout(httpConfig.getTimeout())
- .proxy(new Proxy(Proxy.Type.valueOf(proxyConfig.getType()), new InetSocketAddress(proxyConfig.getHostname(), proxyConfig.getPort())))
- .build());
- }
-
}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/enums/AuthExtendSource.java b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/enums/AuthExtendSource.java
index fd6bb9cb9..16049419f 100644
--- a/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/enums/AuthExtendSource.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/enums/AuthExtendSource.java
@@ -2,7 +2,11 @@ package cn.iocoder.yudao.framework.social.core.enums;
import me.zhyd.oauth.config.AuthSource;
-// TODO @timfruit:类注释
+/**
+ * 拓展JustAuth各api需要的url, 用枚举类分平台类型管理
+ *
+ * 默认配置{@link me.zhyd.oauth.config.AuthDefaultSource}
+ */
public enum AuthExtendSource implements AuthSource {
/**
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/request/AuthWeChatMiniProgramRequest.java b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/request/AuthWeChatMiniProgramRequest.java
index ae9a8e1ec..e5bbfcaad 100644
--- a/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/request/AuthWeChatMiniProgramRequest.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/request/AuthWeChatMiniProgramRequest.java
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.social.core.request;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.social.core.enums.AuthExtendSource;
import cn.iocoder.yudao.framework.social.core.model.AuthExtendToken;
+import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import me.zhyd.oauth.cache.AuthStateCache;
import me.zhyd.oauth.config.AuthConfig;
@@ -39,7 +40,7 @@ public class AuthWeChatMiniProgramRequest extends AuthDefaultRequest {
this.checkResponse(accessTokenObject);
AuthExtendToken token = new AuthExtendToken();
- token.setMiniSessionKey(accessTokenObject.session_key);
+ token.setMiniSessionKey(accessTokenObject.sessionKey);
token.setOpenId(accessTokenObject.openid);
token.setUnionId(accessTokenObject.unionid);
return token;
@@ -86,12 +87,12 @@ public class AuthWeChatMiniProgramRequest extends AuthDefaultRequest {
.build();
}
- // TODO @timfruit:我们要采用驼峰的命名方式。不匹配的,可以通过 jackson 的自定义注解映射
@Data
private static class CodeSessionResponse {
private int errcode;
private String errmsg;
- private String session_key;
+ @JsonProperty("session_key")
+ private String sessionKey;
private String openid;
private String unionid;
}
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
index 6ce205107..c5c512890 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
@@ -51,6 +51,8 @@ import static cn.iocoder.yudao.userserver.modules.system.enums.SysErrorCodeConst
@Slf4j
public class SysAuthServiceImpl implements SysAuthService {
+ private static final UserTypeEnum USER_TYPE_ENUM = UserTypeEnum.MEMBER;
+
@Resource
@Lazy // 延迟加载,因为存在相互依赖的问题
private AuthenticationManager authenticationManager;
@@ -65,7 +67,7 @@ public class SysAuthServiceImpl implements SysAuthService {
private SysUserSessionCoreService userSessionCoreService;
@Resource
private SysSocialCoreService socialService;
- private static final UserTypeEnum USER_TYPE_ENUM = UserTypeEnum.MEMBER; // TODO @timfruit 挪到类的最前面。一般是 静态变量,到成员变量的顺序。
+
@Override
public UserDetails loadUserByUsername(String mobile) throws UsernameNotFoundException {
From 450ca8f907f6e6416d8edb9353a1a00e5a0ceb04 Mon Sep 17 00:00:00 2001
From: timfruit
Date: Wed, 8 Dec 2021 00:17:01 +0800
Subject: [PATCH 4/7] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=89=A9=E4=B8=8B?=
=?UTF-8?q?=E7=9A=84=E5=85=AC=E4=BC=97=E5=8F=B7=E7=99=BB=E5=BD=95=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../controller/auth/SysAuthController.java | 16 +---
.../auth/vo/MbrAuthSocialLogin2ReqVO.java | 19 ++--
.../system/service/auth/SysAuthService.java | 2 +-
.../service/auth/impl/SysAuthServiceImpl.java | 16 ++--
.../main/resources/static/social-login.html | 6 +-
.../main/resources/static/social-login2.html | 87 +++++++++++++++++++
6 files changed, 112 insertions(+), 34 deletions(-)
create mode 100644 yudao-user-server/src/main/resources/static/social-login2.html
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java
index fbca500f7..5eb0e533d 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java
@@ -81,19 +81,6 @@ public class SysAuthController {
return CommonResult.success(socialService.getAuthorizeUrl(type, redirectUri));
}
- // TODO @timfruit:这个接口,是要删除的么?
- @GetMapping("/social-login-get")
- @ApiOperation("微信公众号授权回调地址,输出social-login2的必要参数用于测试,使用 code 授权码")
- @ResponseBody
- @Deprecated
- public CommonResult socialLoginGet(HttpServletRequest request,String code,String state) {
- // 返回结果
- MbrAuthSocialLoginReqVO reqVO = MbrAuthSocialLoginReqVO.builder().state(state).code(code).build();
- reqVO.setType(12);
- //输出social-login2的必要参数用于测试
- System.out.println(JSON.toJSON(reqVO));
- return success(reqVO);
- }
@PostMapping("/social-login")
@ApiOperation("社交登录,使用 code 授权码")
@@ -102,10 +89,9 @@ public class SysAuthController {
return success(SysAuthLoginRespVO.builder().token(token).build());
}
- // TODO @timfruit:社交登陆时,使用手机验证码来验证哈。这块我当时没设计好,改改,嘿嘿。
@PostMapping("/social-login2")
- @ApiOperation("社交登录,使用 code 授权码 + 账号密码")
+ @ApiOperation("社交登录,使用 手机号 + 手机验证码")
public CommonResult socialLogin2(@RequestBody @Valid MbrAuthSocialLogin2ReqVO reqVO) {
String token = authService.socialLogin2(reqVO, getClientIP(), getUserAgent());
return success(SysAuthLoginRespVO.builder().token(token).build());
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLogin2ReqVO.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLogin2ReqVO.java
index 584df7ed1..1da763ed3 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLogin2ReqVO.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLogin2ReqVO.java
@@ -34,15 +34,16 @@ public class MbrAuthSocialLogin2ReqVO {
@NotEmpty(message = "state 不能为空")
private String state;
- @ApiModelProperty(value = "账号", required = true, example = "yudaoyuanma")
- @NotEmpty(message = "登录账号不能为空")
- @Length(min = 4, max = 16, message = "账号长度为 4-16 位")
- @Pattern(regexp = "^[A-Za-z0-9]+$", message = "账号格式为数字以及字母")
- private String username;
+ @ApiModelProperty(value = "手机号", required = true, example = "15119100000")
+ @NotEmpty(message = "手机号不能为空")
+ @Length(min = 11, max = 11, message = "手机号是11位数字")
+ private String mobile;
+
+ @ApiModelProperty(value = "手机验证码", required = true, example = "1024")
+ @NotEmpty(message = "手机验证码不能为空")
+ @Length(min = 4, max = 6, message = "手机验证码长度为 4-6 位")
+ @Pattern(regexp = "^[0-9]+$", message = "手机验证码必须都是数字")
+ private String smsCode;
- @ApiModelProperty(value = "密码", required = true, example = "buzhidao")
- @NotEmpty(message = "密码不能为空")
- @Length(min = 4, max = 16, message = "密码长度为 4-16 位")
- private String password;
}
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/SysAuthService.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/SysAuthService.java
index 628f95c80..3b6b73691 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/SysAuthService.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/SysAuthService.java
@@ -46,7 +46,7 @@ public interface SysAuthService extends SecurityAuthFrameworkService {
String socialLogin(@Valid MbrAuthSocialLoginReqVO reqVO, String userIp, String userAgent);
/**
- * 社交登录,使用 code 授权码 + 账号密码
+ * 社交登录,使用 手机号 + 手机验证码
*
* @param reqVO 登录信息
* @param userIp 用户 IP
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
index c5c512890..bd9100b85 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
@@ -140,19 +140,21 @@ public class SysAuthServiceImpl implements SysAuthService {
@Override
public String socialLogin2(MbrAuthSocialLogin2ReqVO reqVO, String userIp, String userAgent) {
- // 使用 code 授权码,进行登录
AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState());
org.springframework.util.Assert.notNull(authUser, "授权用户不为空");
- // 使用账号密码,进行登录。
- LoginUser loginUser = this.login0(reqVO.getUsername(), reqVO.getPassword());
-// loginUser.setRoleIds(this.getUserRoleIds(loginUser.getId())); // 获取用户角色列表
+ // 使用手机号、手机验证码登录
+ SysAuthSmsLoginReqVO loginReqVO = SysAuthSmsLoginReqVO
+ .builder()
+ .mobile(reqVO.getMobile())
+ .code(reqVO.getSmsCode())
+ .build();
+ String sessionId = this.smsLogin(loginReqVO, userIp, userAgent);
+ LoginUser loginUser = userSessionCoreService.getLoginUser(sessionId);
// 绑定社交用户(新增)
socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, USER_TYPE_ENUM);
-
- // 缓存登录用户到 Redis 中,返回 sessionId 编号
- return userSessionCoreService.createUserSession(loginUser, userIp, userAgent);
+ return sessionId;
}
@Override
diff --git a/yudao-user-server/src/main/resources/static/social-login.html b/yudao-user-server/src/main/resources/static/social-login.html
index 2570d7084..7cf09f00e 100644
--- a/yudao-user-server/src/main/resources/static/social-login.html
+++ b/yudao-user-server/src/main/resources/static/social-login.html
@@ -13,14 +13,16 @@
+点击如下按钮,授权登录
+
+ 手机号
+ 手机验证码
+
+
+
+
+