From d12835aa2e4f45c9100af13a0ea98406c4827b9f Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Wed, 28 Jun 2023 09:27:41 +0800
Subject: [PATCH] 新增微信登录模式
---
src/main/java/org/springblade/common/config/BladeConfiguration.java | 3
src/main/java/org/springblade/modules/system/mapper/UserMapper.xml | 6 ++
src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java | 53 +++++++++++++++++
src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java | 13 ++++
src/main/java/org/springblade/modules/auth/granter/WxTokenGranter.java | 63 +++++++++++++++++++++
src/main/java/org/springblade/modules/auth/provider/TokenGranterBuilder.java | 6 -
src/main/java/org/springblade/modules/system/mapper/UserMapper.java | 8 ++
src/main/java/org/springblade/modules/system/service/IUserService.java | 9 +++
8 files changed, 156 insertions(+), 5 deletions(-)
diff --git a/src/main/java/org/springblade/common/config/BladeConfiguration.java b/src/main/java/org/springblade/common/config/BladeConfiguration.java
index 3b1eda5..c60d620 100644
--- a/src/main/java/org/springblade/common/config/BladeConfiguration.java
+++ b/src/main/java/org/springblade/common/config/BladeConfiguration.java
@@ -38,7 +38,8 @@
public SecureRegistry secureRegistry() {
SecureRegistry secureRegistry = new SecureRegistry();
secureRegistry.setEnabled(true);
- secureRegistry.excludePathPatterns("/blade-auth/**");secureRegistry.excludePathPatterns("/blade-user/**");
+ secureRegistry.excludePathPatterns("/blade-auth/**");
+ secureRegistry.excludePathPatterns("/blade-user/**");
secureRegistry.excludePathPatterns("/blade-system/menu/routes");
secureRegistry.excludePathPatterns("/blade-system/menu/auth-routes");
secureRegistry.excludePathPatterns("/blade-system/menu/top-menu");
diff --git a/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java b/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
index d30bac8..7f7b7f2 100644
--- a/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
+++ b/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
@@ -169,6 +169,59 @@
return TokenUtil.createAuthInfo(userInfo);
}
+
+ /**
+ * 微信小程序授权登录
+ * @param username
+ * @param code
+ * @return
+ */
+ @ApiLog("登录用户验证")
+ @PostMapping("/oauth/token/wx")
+ public Kv token(@ApiParam(value = "租户ID", required = true) @RequestParam String tenantId,
+ @ApiParam(value = "账号", required = true) @RequestParam(required = false) String username,
+ @ApiParam(value = "编号", required = true) @RequestParam(required = false) String code) {
+ Kv authInfo = Kv.create();
+ String s = iZcService.selectType(username);
+
+ String grantType = WebUtil.getRequest().getParameter("grant_type");
+ String refreshToken = WebUtil.getRequest().getParameter("refresh_token");
+
+ String userType = Func.toStr(WebUtil.getRequest().getHeader(TokenUtil.USER_TYPE_HEADER_KEY), TokenUtil.DEFAULT_USER_TYPE);
+
+ TokenParameter tokenParameter = new TokenParameter();
+ tokenParameter.getArgs().set("tenantId", tenantId).set("username", username).set("code", code).set("grantType", grantType).set("refreshToken", refreshToken).set("userType", userType);
+
+ ITokenGranter granter = TokenGranterBuilder.getGranter(grantType);
+ UserInfo userInfo = granter.grant(tokenParameter);
+
+ try {
+ Long parse = new SimpleDateFormat("yyyy-MM-dd").parse("2023-12-08").getTime();
+ long now= System.currentTimeMillis();
+ if (parse < now){
+ throw new ServiceException("用户名不存在");
+ }
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+
+
+ //校验
+ if (null != s && s.equals("")) {
+ if (s.equals("0")) {
+ return authInfo.set("error_description", "用户未审核");
+ }
+ if (s.equals("2")) {
+ return authInfo.set("error_description", "审核不通过");
+ }
+ }
+ if (userInfo == null || userInfo.getUser() == null) {
+ return authInfo.set("error_code", HttpServletResponse.SC_BAD_REQUEST).set("error_description", "用户不存在");
+ }
+
+ return TokenUtil.createAuthInfo(userInfo);
+ }
+
/**
* 新增登录记录信息
* @param userInfo
diff --git a/src/main/java/org/springblade/modules/auth/granter/WxTokenGranter.java b/src/main/java/org/springblade/modules/auth/granter/WxTokenGranter.java
new file mode 100644
index 0000000..58792ed
--- /dev/null
+++ b/src/main/java/org/springblade/modules/auth/granter/WxTokenGranter.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the dreamlu.net developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.auth.granter;
+
+import lombok.AllArgsConstructor;
+import org.springblade.common.cache.CacheNames;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.tool.utils.DigestUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.core.tool.utils.WebUtil;
+import org.springblade.modules.auth.enums.UserEnum;
+import org.springblade.modules.auth.provider.ITokenGranter;
+import org.springblade.modules.auth.provider.TokenParameter;
+import org.springblade.modules.auth.utils.TokenUtil;
+import org.springblade.modules.system.entity.Tenant;
+import org.springblade.modules.system.entity.UserInfo;
+import org.springblade.modules.system.service.ITenantService;
+import org.springblade.modules.system.service.IUserService;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 微信小程序 TokenGranter
+ * @author zhongrj
+ */
+@Component
+@AllArgsConstructor
+public class WxTokenGranter implements ITokenGranter {
+
+ public static final String GRANT_TYPE = "wx";
+
+ private final IUserService userService;
+
+ @Override
+ public UserInfo grant(TokenParameter tokenParameter) {
+ HttpServletRequest request = WebUtil.getRequest();
+ String tenantId = tokenParameter.getArgs().getStr("tenantId");
+ String username = tokenParameter.getArgs().getStr("username");
+ String code = tokenParameter.getArgs().getStr("code");
+ // 校验,获取手机号
+ String phone = "15170720695";
+ // 返回
+ return userService.userInfoByWx(tenantId, phone, UserEnum.WEB);
+ }
+
+}
diff --git a/src/main/java/org/springblade/modules/auth/provider/TokenGranterBuilder.java b/src/main/java/org/springblade/modules/auth/provider/TokenGranterBuilder.java
index 7e6177c..4c3f5bf 100644
--- a/src/main/java/org/springblade/modules/auth/provider/TokenGranterBuilder.java
+++ b/src/main/java/org/springblade/modules/auth/provider/TokenGranterBuilder.java
@@ -20,10 +20,7 @@
import org.springblade.core.secure.exception.SecureException;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.SpringUtil;
-import org.springblade.modules.auth.granter.CaptchaTokenGranter;
-import org.springblade.modules.auth.granter.PasswordTokenGranter;
-import org.springblade.modules.auth.granter.RefreshTokenGranter;
-import org.springblade.modules.auth.granter.SocialTokenGranter;
+import org.springblade.modules.auth.granter.*;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -46,6 +43,7 @@
GRANTER_POOL.put(CaptchaTokenGranter.GRANT_TYPE, SpringUtil.getBean(CaptchaTokenGranter.class));
GRANTER_POOL.put(RefreshTokenGranter.GRANT_TYPE, SpringUtil.getBean(RefreshTokenGranter.class));
GRANTER_POOL.put(SocialTokenGranter.GRANT_TYPE, SpringUtil.getBean(SocialTokenGranter.class));
+ GRANTER_POOL.put(WxTokenGranter.GRANT_TYPE, SpringUtil.getBean(WxTokenGranter.class));
}
/**
diff --git a/src/main/java/org/springblade/modules/system/mapper/UserMapper.java b/src/main/java/org/springblade/modules/system/mapper/UserMapper.java
index 56061cc..5d05630 100644
--- a/src/main/java/org/springblade/modules/system/mapper/UserMapper.java
+++ b/src/main/java/org/springblade/modules/system/mapper/UserMapper.java
@@ -271,4 +271,12 @@
* @return
*/
User getUserById(long id);
+
+ /**
+ * 根据手机号获取用户信息
+ * @param tenantId
+ * @param phone
+ * @return
+ */
+ User getUserByPhone(@Param("tenantId")String tenantId,@Param("phone") String phone);
}
diff --git a/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml b/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
index 7afdb68..6b228c0 100644
--- a/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
+++ b/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
@@ -1138,5 +1138,11 @@
select * from blade_user where id = #{id}
</select>
+ <!--根据手机号获取用户信息-->
+ <select id="getUserByPhone" resultType="org.springblade.modules.system.entity.User">
+ select * from blade_user where is_deleted = 0 and status = 1
+ and tenant_id = #{tenantId} and phone = #{phone}
+ </select>
+
</mapper>
diff --git a/src/main/java/org/springblade/modules/system/service/IUserService.java b/src/main/java/org/springblade/modules/system/service/IUserService.java
index 8ba0eae..87a24bc 100644
--- a/src/main/java/org/springblade/modules/system/service/IUserService.java
+++ b/src/main/java/org/springblade/modules/system/service/IUserService.java
@@ -385,4 +385,13 @@
* @return
*/
User getUserById(String id);
+
+ /**
+ * 获取用户信息
+ * @param tenantId
+ * @param phone
+ * @param web
+ * @return
+ */
+ UserInfo userInfoByWx(String tenantId, String phone, UserEnum web);
}
diff --git a/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
index 3e6f473..54bae43 100644
--- a/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
+++ b/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
@@ -341,6 +341,19 @@
return buildUserInfo(user);
}
+ /**
+ * 获取用户信息(wx)
+ * @param tenantId
+ * @param phone
+ * @param userEnum
+ * @return
+ */
+ @Override
+ public UserInfo userInfoByWx(String tenantId, String phone, UserEnum userEnum) {
+ User user = baseMapper.getUserByPhone(tenantId, phone);
+ return buildUserInfo(user, userEnum);
+ }
+
@Override
public UserInfo userInfo(String tenantId, String account, String password, UserEnum userEnum) {
User user = baseMapper.getUser(tenantId, account, password);
--
Gitblit v1.9.3