Browse Source

修改bug 以及对接一体化平台

liuchanglan 4 years ago
parent
commit
ced030f9ce

+ 5 - 0
src/main/java/com/gz/controller/system/AuthController.java

@@ -34,6 +34,11 @@ public class AuthController {
         return authService.login(loginVO);
     }
 
+    @GetMapping("loginByBase64")
+    public LoginRVO loginByBase64(String base64){
+        return authService.login(base64);
+    }
+
     @GetMapping("logout")
     public void logout(String refreshToken) {
         authService.logout(refreshToken);

+ 1 - 1
src/main/java/com/gz/core/exception/CustomExceptionEnum.java

@@ -13,7 +13,7 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum CustomExceptionEnum implements CustomResponsInterface {
 
-    ACCOUNT_OR_PASSWORD_INCORRECT(1000, "用户名不存在或者密码不正确!"),
+    ACCOUNT_OR_PASSWORD_INCORRECT(1000, "用户名不存在或者密码不正确!"),
     ACCOUNT_DISABLE(1001, "用户已禁用"),
     LOGIN_TIMEOUT(1002, "登录已过期"),
     CAPTCHA_ERROR(1003, "验证码错误"),

+ 6 - 0
src/main/java/com/gz/service/system/AuthService.java

@@ -22,6 +22,12 @@ public interface AuthService {
     LoginRVO login(LoginVO param);
 
     /**
+     * @description 根据Base64登录
+     * @author LiuChangLan
+     * @since 2021/4/23 9:37
+     */
+    LoginRVO login(String base64);
+    /**
      * @description 刷新Token
      * @author LiuChangLan
      * @since 2021/1/23 1:41

+ 55 - 0
src/main/java/com/gz/service/system/impl/AuthServiceImpl.java

@@ -3,6 +3,8 @@ package com.gz.service.system.impl;
 import cn.hutool.captcha.CaptchaUtil;
 import cn.hutool.captcha.CircleCaptcha;
 import cn.hutool.captcha.LineCaptcha;
+import cn.hutool.core.codec.Base62;
+import cn.hutool.core.codec.Base64;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.tree.Tree;
 import cn.hutool.core.lang.tree.TreeNodeConfig;
@@ -161,6 +163,59 @@ public class AuthServiceImpl implements AuthService {
     }
 
     @Override
+    public LoginRVO login(String base64) {
+        String account = Base64.decodeStr(base64);
+        // 查询用户参数
+        AdminDTO param = new AdminDTO();
+        // 根据用户名查
+        param.setAccount(account);
+        AdminDTO loginDTO = adminMapper.selectOne(param);
+        // 用户名没查到
+        if (loginDTO == null) {
+            throw new BusinessException(CustomExceptionEnum.ACCOUNT_OR_PASSWORD_INCORRECT);
+        }
+        // 用户禁用
+        if (loginDTO.getStatus().equals(DataGlobalVariable.USER_STATUS_DISABLE)) {
+            log.warn("账号{}已禁用 无法登录", account);
+            throw new BusinessException(CustomExceptionEnum.ACCOUNT_DISABLE);
+        }
+        DeptDTO deptDTO = deptMapper.selectByPrimaryKey(loginDTO.getDeptId());
+        // 用户设置的权限
+        Integer roleId = loginDTO.getRoleId();
+        // 登录用户未设置权限
+        if (roleId == null) {
+            // 获取部门权限
+            roleId = deptDTO.getRoleId();
+            // 当前部门也未设置权限
+            if (roleId == null) {
+                roleId = this.getRoleId(deptDTO.getParentId());
+            }
+            if (roleId == null) {
+                throw new BusinessException(CustomExceptionEnum.ACCOUNT_NOT_ROLE);
+            }
+        }
+
+        // 生成jwt载体
+        JwtPayload jwtPayload = new JwtPayload(loginDTO.getId(), loginDTO.getAccount(), loginDTO.getAdminName(), roleId, loginDTO.getDeptId(), deptDTO.getDeptName());
+        // token
+        String token = JwtUtils.createToken(jwtPayload, JwtConfig.ACCESS_TOKEN_EFFECTIVE);
+        // refreshToken
+        String refreshToken = IdUtil.simpleUUID();
+        // 存储token的key
+        String refreshTokenKey = String.format(JwtConfig.REFRESH_TOKEN_KEY_FORMAT, refreshToken);
+        // 设置当前有效的Token
+        stringRedisTemplate.opsForHash().put(refreshTokenKey, JwtConfig.REDIS_JWT_TOKEN_KEY, token);
+        // 存储载体
+        stringRedisTemplate.opsForHash().put(refreshTokenKey, JwtConfig.REDIS_JWT_PAYLOAD_KEY, JSONObject.toJSONString(jwtPayload));
+        // refresh token 设置过期时间
+        stringRedisTemplate.expire(refreshTokenKey, JwtConfig.REFRESH_TOKEN_EXPIRE_TIME, TimeUnit.SECONDS);
+        // 记录登录日志
+        logMapper.insertSelective(new LogDTO(DataGlobalVariable.LOGIN_LOG_CODE, "系统管理", "登录", "com.gz.controller.system.login", null, null, RequestUtils.getIpAddress(request), null, null));
+        log.info("一体化平台跳转登录成");
+        return new LoginRVO(token, refreshToken, System.currentTimeMillis());
+    }
+
+    @Override
     public LoginRVO refreshToken(String refreshToken) {
         String refreshTokenKey = String.format(JwtConfig.REFRESH_TOKEN_KEY_FORMAT, refreshToken);
         String payload = (String) stringRedisTemplate.opsForHash().get(refreshTokenKey, JwtConfig.REDIS_JWT_PAYLOAD_KEY);

+ 2 - 2
src/main/resources/application.yml

@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: prod
+    active: dev
   servlet:
     multipart:
       max-file-size: 5120MB
@@ -22,7 +22,7 @@ auth:
     # 进行登录验证的地址
     force-urls: /**
     # 跳过验证地址
-    skip-urls: /,/**/*.pdf,/**/*.png,/**/*.jpg,/**/*.html,/**/*.ico,/**/*.css,/**/*.gif,/**/*.js,/webSocket/**,/**/*.woff2,/**/*.less,/system/auth/login,/system/auth/refreshToken,/system/auth/generatePictureCaptcha,/template/*.xlsx,/rabbit/test
+    skip-urls: /,/**/*.pdf,/**/*.png,/**/*.jpg,/**/*.html,/**/*.ico,/**/*.css,/**/*.gif,/**/*.js,/webSocket/**,/**/*.woff2,/**/*.less,/system/auth/login,/system/auth/refreshToken,/system/auth/generatePictureCaptcha,/template/*.xlsx,/rabbit/test,/system/auth/loginByBase64
 rabbitmq:
   # 数据交换机
   data-exchange: ARCHIVE_DATA_EXCHANGE

+ 21 - 10
src/main/resources/static/index.html

@@ -197,6 +197,27 @@
             websocket = {},
             http = layui.http;
 
+        // 获取参数
+        function getParams(key) {
+            var reg = new RegExp("(^|&)" + key + "=([^&]*)(&|$)");
+            var r = window.location.search.substr(1).match(reg);
+            if (r != null) {
+                return unescape(r[2]);
+            }
+            return null;
+        }
+
+
+        let loginByBase64 = function (){
+            debugger
+            let base64 = getParams('loginName')
+            if (base64){
+                http.loginByBase64(base64)
+            }
+        }
+
+        loginByBase64()
+
 
         // 加载用户名
         let getLoginUserName = function () {
@@ -234,16 +255,6 @@
                 });
             })
         });
-
-        // 获取参数
-        function getParams(key) {
-            var reg = new RegExp("(^|&)" + key + "=([^&]*)(&|$)");
-            var r = window.location.search.substr(1).match(reg);
-            if (r != null) {
-                return unescape(r[2]);
-            }
-            return null;
-        }
     });
 
 </script>

+ 23 - 0
src/main/resources/static/js/lay-module/request/http.js

@@ -107,6 +107,26 @@ layui.define(['jquery', 'layer'], function (exports) {
         })
     }
 
+
+    let loginByBase64 = function (base64) {
+        ajax('system/auth/loginByBase64', 'GET', {
+            base64: base64
+        }, true, res => {
+            if (res.code == 200) {
+                layui.data('auth', {
+                    key: 'data',
+                    value: res.data
+                })
+                window.location = 'index.html'
+                // layer.msg('登录成功', {
+                //     icon: 1
+                // }, function () {
+                //     window.location = 'index.html';
+                // });
+            }
+        })
+    }
+
     let refreshToken = function (method, type, data, async, callback) {
         ajax('system/auth/refreshToken', 'GET', {
             refreshToken: (layui.data('auth').data ? layui.data('auth').data.refreshToken : null) || null
@@ -160,6 +180,9 @@ layui.define(['jquery', 'layer'], function (exports) {
         login: function (data) {
             login(data)
         },
+        loginByBase64: function (base64){
+            loginByBase64(base64)
+        },
         host: host,
         requestUrl: requestUrl
     };