Browse Source

二维码登录接口开发,识别扫码枪内容(用户名-密码-#)这种格式直接扫码登录

yejian016332 3 năm trước cách đây
mục cha
commit
b5b8e3f177

+ 6 - 0
imcs-admin-boot/imcs-authority-entity/src/main/java/com/github/zuihou/authority/dto/auth/LoginParamDTO.java

@@ -48,4 +48,10 @@ public class LoginParamDTO {
      */
     @ApiModelProperty(value = "刷新token")
     private String refreshToken;
+
+    /**
+     * 前端界面点击清空缓存时调用
+     */
+    @ApiModelProperty(value = "qcode扫码登录信息")
+    private String qcodeUser;
 }

+ 10 - 3
imcs-admin-boot/imcs-oauth-biz/src/main/java/com/github/zuihou/oauth/granter/AbstractTokenGranter.java

@@ -28,6 +28,7 @@ import com.github.zuihou.tenant.service.TenantService;
 import com.github.zuihou.utils.*;
 import lombok.extern.slf4j.Slf4j;
 import net.oschina.j2cache.CacheChannel;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.time.LocalDateTime;
@@ -86,7 +87,7 @@ public abstract class AbstractTokenGranter implements TokenGranter {
         }
 
         // 3. 验证登录
-        R<User> result = this.getUser(tenant, loginParam.getAccount(), loginParam.getPassword());
+        R<User> result = this.getUser(tenant, loginParam.getAccount(), loginParam.getPassword(),loginParam.getCode());
         if (result.getIsError()) {
             return R.fail(result.getCode(), result.getMsg());
         }
@@ -142,12 +143,18 @@ public abstract class AbstractTokenGranter implements TokenGranter {
      * @param tenant   租户
      * @param account  账号
      * @param password 密码
+     * @param code 验证码
      * @return 用户信息
      */
-    protected R<User> getUser(Tenant tenant, String account, String password) {
+    protected R<User> getUser(Tenant tenant, String account, String password,String code) {
         User user = this.userService.getByAccount(account);
         // 密码错误
-        String passwordMd5 = cn.hutool.crypto.SecureUtil.md5(password);
+        String passwordMd5 = "";
+        if(StringUtils.isBlank(code)){
+            passwordMd5 = password;
+        }else{
+            passwordMd5 = cn.hutool.crypto.SecureUtil.md5(password);
+        }
         if (user == null) {
             return R.fail(ExceptionCode.JWT_USER_INVALID);
         }

+ 32 - 0
imcs-admin-boot/imcs-oauth-controller/src/main/java/com/github/zuihou/oauth/controller/OauthController.java

@@ -3,6 +3,7 @@ package com.github.zuihou.oauth.controller;
 import cn.hutool.core.util.StrUtil;
 import com.github.zuihou.authority.dto.auth.LoginParamDTO;
 import com.github.zuihou.base.R;
+import com.github.zuihou.common.constant.BizConstant;
 import com.github.zuihou.context.BaseContextHandler;
 import com.github.zuihou.exception.BizException;
 import com.github.zuihou.jwt.TokenUtil;
@@ -16,6 +17,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -23,6 +25,8 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
+import static com.github.zuihou.utils.BizAssert.isFalse;
+
 /**
  * 认证Controller
  *
@@ -116,4 +120,32 @@ public class OauthController {
         }
         return authManager.adminLogin(login.getAccount(), login.getPassword());
     }
+
+
+    /**
+     * 二维码登录系统
+     *
+     * @param login
+     * @return
+     * @throws BizException
+     */
+    @ApiOperation(value = "二维码登录", notes = "登录或者清空缓存时调用")
+    @PostMapping(value = "/qcodelogin")
+    public R<AuthInfo> qcodelogin(@Validated @RequestBody LoginParamDTO login) throws BizException {
+        if (StrUtil.isBlank(login.getTenant())) {
+            login.setTenant(BaseContextHandler.getTenant());
+        }
+        login.setTenant(JwtUtil.base64Decoder(login.getTenant()));
+        if(StringUtils.isNotBlank(login.getQcodeUser())){
+            String[] tokenUserInfos = login.getQcodeUser().split("-");
+            isFalse(tokenUserInfos.length != 3, "扫码用户参数错误");
+            login.setAccount(tokenUserInfos[0]);
+            login.setPassword(tokenUserInfos[1]);
+        }
+
+        TokenGranter granter = tokenGranterBuilder.getGranter(login.getGrantType());
+        R<AuthInfo> userInfo = granter.grant(login);
+
+        return userInfo;
+    }
 }

+ 3 - 0
imcs-admin-boot/imcs-oauth-controller/src/main/java/com/github/zuihou/oauth/controller/OauthMenuController.java

@@ -6,6 +6,7 @@ import com.github.zuihou.authority.dto.auth.VueRouter;
 import com.github.zuihou.authority.entity.auth.Menu;
 import com.github.zuihou.authority.service.auth.MenuService;
 import com.github.zuihou.base.R;
+import com.github.zuihou.common.constant.BizConstant;
 import com.github.zuihou.database.properties.DatabaseProperties;
 import com.github.zuihou.dozer.DozerUtils;
 import com.github.zuihou.security.annotation.LoginUser;
@@ -16,6 +17,7 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.validation.annotation.Validated;
@@ -143,6 +145,7 @@ public class OauthMenuController {
             userId = sysUser.getId();
         }
         tenantCode = Base64.decodeStr(tenantCode);
+
         List<Menu> list = menuService.findTenantVisibleMenu(tenantDatabasePrefix,tenantCode, group, userId);
         List<VueRouter> treeList = dozer.mapList(list, VueRouter.class);
         return R.success(TreeUtil.buildTree(treeList));