From 09ac15835fe8c1c655efd231509a5ae98499e4e4 Mon Sep 17 00:00:00 2001
From: xiejun <xj@2023>
Date: 星期三, 29 十一月 2023 14:26:05 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/UBCS-WEB/package.json                                                                   |   68 ++++----
 /dev/null                                                                                      |  158 ----------------------
 Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetailsServiceImpl.java |    6 
 Source/UBCS-WEB/src/views/monitor/log/operateLog.vue                                           |  177 +++++++++++++++++++++++++
 4 files changed, 216 insertions(+), 193 deletions(-)

diff --git a/Source/UBCS-WEB/package.json b/Source/UBCS-WEB/package.json
index 3d5663c..0b035b2 100644
--- a/Source/UBCS-WEB/package.json
+++ b/Source/UBCS-WEB/package.json
@@ -11,44 +11,44 @@
     "test:e2e": "vue-cli-service test:e2e"
   },
   "dependencies": {
-    "avue-plugin-ueditor": "^0.1.4",
-    "axios": "^0.18.0",
-    "babel-polyfill": "^6.26.0",
-    "classlist-polyfill": "^1.2.0",
-    "crypto-js": "^4.1.1",
+    "avue-plugin-ueditor": "0.1.4",
+    "axios": "0.18.0",
+    "babel-polyfill": "6.26.0",
+    "classlist-polyfill": "1.2.0",
+    "crypto-js": "4.1.1",
     "echarts": "4.9.0",
-    "element-ui": "^2.15.6",
-    "instead": "^1.0.3",
-    "js-base64": "^2.5.1",
-    "js-cookie": "^2.2.0",
-    "js-md5": "^0.7.3",
-    "js-pinyin": "^0.2.4",
-    "mockjs": "^1.0.1-beta3",
-    "moment": "^2.29.4",
-    "node-gyp": "^4.0.0",
-    "nprogress": "^0.2.0",
-    "portfinder": "^1.0.23",
-    "save": "^2.9.0",
-    "script-loader": "^0.7.2",
-    "vue": "^2.6.10",
-    "vue-axios": "^2.1.2",
-    "vue-clipboard2": "^0.3.3",
+    "element-ui": "2.15.6",
+    "instead": "1.0.3",
+    "js-base64": "2.5.1",
+    "js-cookie": "2.2.0",
+    "js-md5": "0.7.3",
+    "js-pinyin": "0.2.4",
+    "mockjs": "1.0.1-beta3",
+    "moment": "2.29.4",
+    "node-gyp": "4.0.0",
+    "nprogress": "0.2.0",
+    "portfinder": "1.0.23",
+    "save": "2.9.0",
+    "script-loader": "0.7.2",
+    "vue": "2.6.10",
+    "vue-axios": "2.1.2",
+    "vue-clipboard2": "0.3.3",
     "vue-echarts": "5.0.0-beta.0",
-    "vue-flowchart-editor": "^1.0.2",
-    "vue-i18n": "^8.7.0",
-    "vue-router": "^3.0.1",
-    "vuex": "^3.1.1"
+    "vue-flowchart-editor": "1.0.2",
+    "vue-i18n": "8.7.0",
+    "vue-router": "3.0.1",
+    "vuex": "3.1.1"
   },
   "devDependencies": {
-    "@vue/cli-plugin-babel": "^3.1.1",
-    "@vue/cli-plugin-eslint": "^3.1.5",
-    "@vue/cli-service": "^3.1.4",
-    "@vue/composition-api": "^1.7.2",
-    "chai": "^4.1.2",
-    "node-sass": "^6.0.1",
-    "sass-loader": "^10.0.5",
-    "vue-template-compiler": "^2.5.17",
-    "webpack-bundle-analyzer": "^3.0.3"
+    "@vue/cli-plugin-babel": "3.1.1",
+    "@vue/cli-plugin-eslint": "3.1.5",
+    "@vue/cli-service": "3.1.4",
+    "@vue/composition-api": "1.7.2",
+    "chai": "4.1.2",
+    "node-sass": "6.0.1",
+    "sass-loader": "10.0.5",
+    "vue-template-compiler": "2.5.17",
+    "webpack-bundle-analyzer": "3.0.3"
   },
   "lint-staged": {
     "*.js": [
diff --git a/Source/UBCS-WEB/src/views/monitor/log/authLog.vue b/Source/UBCS-WEB/src/views/monitor/log/authLog.vue
deleted file mode 100644
index e69de29..0000000
--- a/Source/UBCS-WEB/src/views/monitor/log/authLog.vue
+++ /dev/null
diff --git a/Source/UBCS-WEB/src/views/monitor/log/loginLog.vue b/Source/UBCS-WEB/src/views/monitor/log/loginLog.vue
deleted file mode 100644
index e5d653c..0000000
--- a/Source/UBCS-WEB/src/views/monitor/log/loginLog.vue
+++ /dev/null
@@ -1,158 +0,0 @@
-<template>
-  <basic-container>
-    <avue-crud :option="option"
-               :table-loading="loading"
-               :data="data"
-               ref="crud"
-               v-model="form"
-               :permission="permissionList"
-               :page.sync="page"
-               :before-open="beforeOpen"
-               @search-change="searchChange"
-               @search-reset="searchReset"
-               @current-change="currentChange"
-               @size-change="sizeChange"
-               @refresh-change="refreshChange"
-               @on-load="onLoad">
-    </avue-crud>
-  </basic-container>
-</template>
-
-<script>
-  import { listLogOperate } from "@/api/logs";
-  import {mapGetters} from "vuex";
-
-  export default {
-    data() {
-      return {
-        form: {},
-        selectionList: [],
-        query: {},
-        //鏄惁鏄笁鍛樼鐞嗗憳鏃ュ織
-        isAdmin: 0,
-        // LoginOrLogout:鐧诲綍鏃ュ織,auth:鎺堟潈鏃ュ織,operate:鎿嶄綔鏃ュ織
-        logType: "LoginOrLogout",
-        loading: true,
-        page: {
-          pageSize: 10,
-          currentPage: 1,
-          total: 0
-        },
-        option: {
-          height: 'auto',
-          calcHeight: 30,
-          columnBtn:false,
-          tip: false,
-          searchShow: true,
-          searchMenuSpan: 6,
-          border: true,
-          index: true,
-          viewBtn: true,
-          editBtn: false,
-          addBtn: false,
-          delBtn: false,
-          menuWidth: 120,
-          dialogType: 'drawer',
-          column: [
-            {
-              label: "鐢ㄦ埛鍚�",
-              prop: "userName",
-              search: true
-            },
-            {
-              label: "濮撳悕",
-              prop: "realName",
-              search: true
-            },
-            {
-              label: "鐢ㄦ埛ip",
-              prop: "ip"
-            },
-            {
-              label: "妯″潡",
-              prop: "model",
-              width:'160'
-            },
-            {
-              label: "鏃堕棿",
-              prop: "time"
-            },
-            {
-              label: "鎿嶄綔缁撴灉",
-              prop: "operateResult"
-            },
-            {
-              label: "鎻忚堪",
-              prop: "description"
-            },
-          ]
-        },
-        data: []
-      };
-    },
-    computed: {
-      ...mapGetters(["permission"]),
-      permissionList() {
-        return {
-          viewBtn: this.vaildData(this.permission.log_usual.log_usual_view, false)
-        };
-      },
-    },
-    methods: {
-      searchReset() {
-        this.query = {};
-        this.onLoad(this.page);
-      },
-      searchChange(params, done) {
-        this.query = params;
-        this.page.currentPage = 1;
-        this.onLoad(this.page, params);
-        done();
-      },
-      underscoreName(key) {
-        return key.replace(/([A-Z])/g, "_$1").toLowerCase();
-      },
-      beforeOpen(done, type) {
-        if (["edit", "view"].includes(type)) {
-          getUsualLogs(this.form.id).then(res => {
-            this.form = res.data.data;
-          });
-        }
-        done();
-      },
-      currentChange(currentPage){
-        this.page.currentPage = currentPage;
-      },
-      sizeChange(pageSize){
-        this.page.pageSize = pageSize;
-      },
-      refreshChange() {
-        this.onLoad(this.page, this.query);
-      },
-      onLoad(page, params = {}) {
-        let conditionMaps = {};
-        conditionMaps["conditionMap[is_admin]"] = this.isAdmin;
-        conditionMaps["conditionMap[log_type]"] = this.logType.trim();
-        if (params) {
-          Object.keys(params).forEach((key) => {
-            conditionMaps["conditionMap[" + this.underscoreName(key) + "_like]"] = params[key].trim();
-          });
-        }
-        this.loading = true;
-        listLogOperate(
-          page.currentPage, 
-          page.pageSize,
-          conditionMaps
-        ).then(res => {
-          const data = res.data.data;
-          this.page.total = data.total;
-          this.data = data.records;
-          this.loading = false;
-        });
-      }
-    }
-  };
-</script>
-
-<style>
-</style>
diff --git a/Source/UBCS-WEB/src/views/monitor/log/operateLog.vue b/Source/UBCS-WEB/src/views/monitor/log/operateLog.vue
index e69de29..b797733 100644
--- a/Source/UBCS-WEB/src/views/monitor/log/operateLog.vue
+++ b/Source/UBCS-WEB/src/views/monitor/log/operateLog.vue
@@ -0,0 +1,177 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               ref="crud"
+               v-model="form"
+               :permission="permissionList"
+               :page.sync="page"
+               :before-open="beforeOpen"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import { listLogOperate } from "@/api/logs";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        form: {},
+        selectionList: [],
+        query: {},
+        //鏄惁鏄笁鍛樼鐞嗗憳鏃ュ織
+        isAdmin: '',
+        // LoginOrLogout:鐧诲綍鏃ュ織,grant:鎺堟潈鏃ュ織,operate:鎿嶄綔鏃ュ織
+        logType: '',
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        option: {
+          height: 'auto',
+          calcHeight: 30,
+          columnBtn:false,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          editBtn: false,
+          addBtn: false,
+          delBtn: false,
+          menuWidth: 120,
+          dialogType: 'drawer',
+          column: [
+            {
+              label: "鐢ㄦ埛鍚�",
+              prop: "userName",
+              search: true,
+              width:'100'
+            },
+            {
+              label: "濮撳悕",
+              prop: "realName",
+              search: true,
+              width:'100'
+            },
+            {
+              label: "鐢ㄦ埛ip",
+              prop: "ip",
+              width:'100'
+            },
+            {
+              label: "妯″潡",
+              prop: "model",
+              width:'140'
+            },
+            {
+              label: "鏃堕棿",
+              prop: "time",
+              width:'160'
+            },
+            {
+              label: "鎿嶄綔缁撴灉",
+              prop: "operateResult",
+              width:'100'
+            },
+            {
+              label: "鎻忚堪",
+              prop: "description",
+              width:'300'
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          viewBtn: this.vaildData(this.permission.log_usual.log_usual_view, false)
+        };
+      },
+    },
+    created() {
+      this.getRouteParam()
+    },
+    methods: {
+      //鑾峰彇鏁版嵁
+      getRouteParam() {
+        const logType = this.$route.query.log_type; // 鑾峰彇log_type鍙傛暟鐨勫��
+        const result = logType.substring(0, logType.indexOf(':')); // 鎴彇浠�0鍒癅涔嬮棿鐨勫瓙瀛楃涓�
+        const isAdmin = logType.substring(logType.indexOf(':')+1, logType.indexOf('@')); // 浠嶡涔嬪悗鎴彇鍒版湯灏剧殑瀛愬瓧绗︿覆
+        this.logType = result;
+        this.isAdmin = isAdmin;
+        //console.log(this.logType)
+        //console.log(this.isAdmin)
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      underscoreName(key) {
+        return key.replace(/([A-Z])/g, "_$1").toLowerCase();
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getUsualLogs(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        let conditionMaps = {};
+        conditionMaps["conditionMap[is_admin]"] = this.isAdmin;
+        conditionMaps["conditionMap[log_type]"] = this.logType.trim();
+        if (params) {
+          Object.keys(params).forEach((key) => {
+            conditionMaps["conditionMap[" + this.underscoreName(key) + "_like]"] = params[key].trim();
+          });
+        }
+        this.loading = true;
+        listLogOperate(
+          page.currentPage, 
+          page.pageSize,
+          conditionMaps
+        ).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetailsServiceImpl.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetailsServiceImpl.java
index 9913f8b..eb886d5 100644
--- a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetailsServiceImpl.java
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetailsServiceImpl.java
@@ -31,6 +31,7 @@
 import com.vci.ubcs.common.cache.CacheNames;
 import org.springblade.core.jwt.JwtUtil;
 import org.springblade.core.jwt.props.JwtProperties;
+import org.springblade.core.launch.constant.TokenConstant;
 import org.springblade.core.log.annotation.LoginOrLogoutLog;
 import org.springblade.core.redis.cache.BladeRedis;
 import org.springblade.core.secure.utils.AuthUtil;
@@ -110,6 +111,7 @@
 		// 鑾峰彇绉熸埛ID
 		String headerTenant = request.getHeader(TokenUtil.TENANT_HEADER_KEY);
 		String paramTenant = request.getParameter(TokenUtil.TENANT_PARAM_KEY);
+		String refreshToken = request.getParameter(TokenConstant.REFRESH_TOKEN);
 		String password = request.getParameter(TokenUtil.PASSWORD_KEY);
 		String grantType = request.getParameter(TokenUtil.GRANT_TYPE_KEY);
 		// 鍒ゆ柇绉熸埛璇锋眰澶�
@@ -139,7 +141,9 @@
 
 		//瓒呯骇绠$悊鍛橀厤缃枃浠堕厤缃处鍙峰瘑鐮侊紝瀹炵幇鐧诲綍, 榛樿绉熸埛id鍜岃秴绠′负閰嶇疆鍑烘潵鐨�
 		if(tenantId.equals(this.tenantId) && userName.equals(username)){
-			if (!this.userName.equals(username) || !BladePasswordEncoderFactories.createDelegatingPasswordEncoder().encode(password).equalsIgnoreCase(AuthConstant.ENCRYPT+this.password)) {
+			if (Func.isBlank(refreshToken)/*鍒锋柊token涓嶇敤鏍¢獙瀵嗙爜*/
+				&& (!this.userName.equals(username) || !BladePasswordEncoderFactories.createDelegatingPasswordEncoder().encode(password).equalsIgnoreCase(AuthConstant.ENCRYPT+this.password))
+			) {
 				setFailCount(tenantId, username, count,strategy.getLockingTime());
 				throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND+"杩樻湁銆�"+(failCount-count)+"銆戞灏濊瘯鏈轰細!");
 			}

--
Gitblit v1.9.3