Sfoglia il codice sorgente

Merge branch 'feature/0721-tenant'

yuanliang 1 anno fa
parent
commit
c0fd7c5c4d

+ 9 - 2
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/handler/BaseAuthenticationFailureEvenHandler.java

@@ -38,20 +38,27 @@ public class BaseAuthenticationFailureEvenHandler extends ExceptionMappingAuthen
         }else if(message.equals("404.9")){
         	message = "用户名或密码错误";
         	resultCode = 99;
-        } else if (message.startsWith("MA:404:")) {
+        } else if (message.startsWith("MA:5001:")) {
             // 返回用户绑定openId
             data = message.split(":")[2];
             // 用户未绑定openId错误码
             resultCode = 5001;
             // 用户未绑定openId错误信息
             message = "用户未绑定小程序账号";
-        }else if (message.startsWith("MA:5004:")) {
+        } else if (message.startsWith("MA:5004:")) {
             // 返回用户绑定openId
             data = message.split(":")[2];
             // 用户未绑定openId错误码
             resultCode = 5004;
             // 用户未绑定openId错误信息
             message = "该机构已被冻结,请联系管理员";
+        } else if (message.startsWith("MA:5006:")) {
+            // 返回用户绑定openId
+            data = message.split(":")[2];
+            // 用户未绑定openId错误码
+            resultCode = 5006;
+            // 用户未绑定openId错误信息
+            message = "账号已冻结";
         }
         logger.info("登录失败,异常:{}", message);
         HttpResponseResult result = new HttpResponseResult(false, resultCode, data, message);

+ 4 - 2
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java

@@ -31,6 +31,7 @@ import org.springframework.security.jwt.crypto.sign.RsaVerifier;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.security.interfaces.RSAPublicKey;
+import java.text.MessageFormat;
 import java.util.Date;
 import java.util.Objects;
 
@@ -103,11 +104,12 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
             // 根据用户授权openid,查询机构员工绑定信息
             SysUser sysUser = sysUserService.getSysUserByOpenId(openid, clientId);
             if (Objects.isNull(sysUser)) {
-                throw new UsernameNotFoundException("MA:404:" + openid);
+                // 小程序未绑定账号
+                throw new UsernameNotFoundException("MA:5001:" + openid);
             }
 
             // 重置登陆账号信息
-            username = SecurityConstants.PHONE_PRINCIPAL_PREFIX + sysUser.getPhone();
+            username = MessageFormat.format(SecurityConstants.MA_PRINCIPAL_PREFIX, openid, sysUser.getPhone());
 
             // 绑定设备
             if (StringUtils.isNotBlank(deviceNum)) {

+ 13 - 4
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/service/DefaultUserDetailsService.java

@@ -49,10 +49,17 @@ public class DefaultUserDetailsService implements UserDetailsService {
 
         SysUserInfo userInfo;
 
+        String openid = "";
         if (StringUtils.startsWith(username, SecurityConstants.PHONE_PRINCIPAL_PREFIX)) {
             userInfo = sysUserService.queryUserInfoByPhone(StringUtils.substringAfter(username, SecurityConstants.PHONE_PRINCIPAL_PREFIX));
         } else if (StringUtils.startsWith(username, SecurityConstants.USERNAME_PRINCIPAL_PREFIX)) {
             userInfo = sysUserService.queryUserInfoByUsername(StringUtils.substringAfter(username, SecurityConstants.USERNAME_PRINCIPAL_PREFIX));
+        } else if (StringUtils.startsWith(username, SecurityConstants.MA_PRINCIPAL_PREFIX)) {
+            String[] values = username.split(":");
+            // 设置用户的openId
+            openid = values[1];
+            // 根据手机号查询用户信息
+            userInfo = sysUserService.queryUserInfoByPhone(values[2]);
         } else {
             userInfo = sysUserService.queryUserInfoByUsername(username);
         }
@@ -93,11 +100,13 @@ public class DefaultUserDetailsService implements UserDetailsService {
             if (tenantStaff == null) {
                 throw new UsernameNotFoundException("账户不存在");
             }
-            if (Boolean.FALSE.equals(tenantStaff.getTenantEnableFlag())) {
-                throw new UsernameNotFoundException("MA:5004:" + sysUser.getWxOpenid());
-            }
             if (UserLockFlag.LOCKED.name().equals(tenantStaff.getStatus())) {
-                throw new LockedException("账户被锁定");
+                // 账号被锁定
+                throw new UsernameNotFoundException("MA:5006:" + openid);
+            }
+            if (Boolean.FALSE.equals(tenantStaff.getTenantEnableFlag())) {
+                // 机构锁定
+                throw new UsernameNotFoundException("MA:5004:" + openid);
             }
         }
 

+ 2 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/security/SecurityConstants.java

@@ -6,6 +6,8 @@ public interface SecurityConstants {
 
 	String PHONE_PRINCIPAL_PREFIX = "phone:";
 
+	String MA_PRINCIPAL_PREFIX = "ma:{0}:{1}";
+
 	String PARAM_VERIFY_EXCEPTION = "参数校验异常";
 
 	String VERIFY_FAILURE = "校验失败";

+ 23 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenTenantController.java

@@ -1,16 +1,19 @@
 package com.yonge.cooleshow.tenant.controller.open;
 
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.TenantApplyRecord;
 import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.entity.TenantStaff;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.service.SmsCodeService;
 import com.yonge.cooleshow.biz.dal.service.SysConfigService;
+import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.biz.dal.service.TenantApplyRecordService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.service.TenantStaffService;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantApplyRecordWrapper;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.UserLockFlag;
 import com.yonge.toolset.base.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -41,6 +44,10 @@ public class OpenTenantController {
     private SmsCodeService smsCodeService;
 
     @Autowired
+    private SysUserService sysUserService;
+
+
+    @Autowired
     private TenantInfoService tenantInfoService;
 
     @Autowired
@@ -74,6 +81,21 @@ public class OpenTenantController {
         if (!validCode) {
             throw new BizException("验证码错误");
         }
+        // 判断当前小程序是否绑定账号
+        TenantStaff staff = tenantStaffService.lambdaQuery()
+                .eq(TenantStaff::getWxOpenid, openId)
+                .last("limit 1").one();
+        if (staff != null) {
+            SysUser sysUser = sysUserService.findUserById(staff.getUserId());
+            if (sysUser != null && !phone.equals(sysUser.getPhone())) {
+                throw new BizException("当前账号已绑定");
+            }
+            // 判断当前账号是否锁定
+            if (UserLockFlag.LOCKED.equals(staff.getStatus())) {
+                throw new BizException("当前账号已锁定");
+            }
+        }
+
         TenantStaff tenantStaff = tenantStaffService.getByPhone(phone);
         if (tenantStaff == null) {
             TenantApplyRecord one = tenantApplyRecordService.lambdaQuery()
@@ -87,6 +109,7 @@ public class OpenTenantController {
                 throw new BizException(5003, "请等待审核完成");
             }
         }
+
 //        Long tenantId = tenantStaff.getTenantId();
 //        TenantInfo tenantInfo = tenantInfoService.getById(tenantId);
 //        if(tenantInfo == null){