From f3e793d0cb0810401545820c41b18df16db7f6fa Mon Sep 17 00:00:00 2001
From: wanglizhong <wlz>
Date: 星期四, 01 五月 2025 19:21:06 +0800
Subject: [PATCH] fix:ui 层面增加匿名访问
---
ruoyi-ui/src/permission.js | 6
ruoyi-ui/src/utils/request.js | 5
ruoyi-ui/src/views/anonymous/test.vue | 211 ++++++++++++++++++++++++++++++++++++++++++
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysClientAppController.java | 1
ruoyi-ui/src/api/anonymous/index.js | 18 +++
ruoyi-ui/src/router/index.js | 12 +
6 files changed, 247 insertions(+), 6 deletions(-)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysClientAppController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysClientAppController.java
index 79c319b..672944d 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysClientAppController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysClientAppController.java
@@ -125,6 +125,7 @@
String sign = SecurityUtils.md5(signStr);
AjaxResult ajax = AjaxResult.success();
+ ajax.put("use","md5(appId+timestamp+securityKey)");
ajax.put("appId", appId);
ajax.put("timestamp", String.valueOf(timestamp));
ajax.put("sign", sign);
diff --git a/ruoyi-ui/src/api/anonymous/index.js b/ruoyi-ui/src/api/anonymous/index.js
new file mode 100644
index 0000000..63fd42b
--- /dev/null
+++ b/ruoyi-ui/src/api/anonymous/index.js
@@ -0,0 +1,18 @@
+import request from '@/utils/request'
+
+// 鐢熸垚绛惧悕
+export function generateSign(appId) {
+ return request({
+ url: '/system/clientApp/generateSign/' + appId,
+ method: 'get'
+ })
+}
+
+// 鍖垮悕璁块棶绀轰緥
+export function anonymousTest(data) {
+ return request({
+ url: '/system/clientApp/testSign',
+ method: 'get',
+ params: data
+ })
+}
\ No newline at end of file
diff --git a/ruoyi-ui/src/permission.js b/ruoyi-ui/src/permission.js
index b66190b..5256c2c 100644
--- a/ruoyi-ui/src/permission.js
+++ b/ruoyi-ui/src/permission.js
@@ -9,7 +9,7 @@
NProgress.configure({ showSpinner: false })
-const whiteList = ['/login', '/register']
+const whiteList = ['/login', '/register','/anonymous/*']
const isWhiteList = (path) => {
return whiteList.some(pattern => isPathMatch(pattern, path))
@@ -47,9 +47,11 @@
}
}
} else {
+ debugger;
// 娌℃湁token
- if (isWhiteList(to.path)) {
+ if (isWhiteList(to.path) || to.meta.anonymous) {
// 鍦ㄥ厤鐧诲綍鐧藉悕鍗曪紝鐩存帴杩涘叆
+
next()
} else {
next(`/login?redirect=${encodeURIComponent(to.fullPath)}`) // 鍚﹀垯鍏ㄩ儴閲嶅畾鍚戝埌鐧诲綍椤�
diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js
index 00013cc..635a020 100644
--- a/ruoyi-ui/src/router/index.js
+++ b/ruoyi-ui/src/router/index.js
@@ -95,11 +95,17 @@
]
},
{
- path: 'order/detail/:id',
+ path: '/order/detail/:id',
component: () => import('@/views/system/order/detail'),
name: 'OrderDetail',
- meta: { title: '璁㈠崟璇︽儏' },
- hidden: true
+ hidden: true,
+ meta: { title: '璁㈠崟璇︽儏椤�', anonymous: true }
+ },
+ {
+ path: '/anonymous/test',
+ component: () => import('@/views/anonymous/test'),
+ hidden: true,
+ meta: { title: '鍖垮悕璁块棶娴嬭瘯', anonymous: true }
}
]
diff --git a/ruoyi-ui/src/utils/request.js b/ruoyi-ui/src/utils/request.js
index ffb0d21..1f4d473 100644
--- a/ruoyi-ui/src/utils/request.js
+++ b/ruoyi-ui/src/utils/request.js
@@ -26,7 +26,10 @@
const isToken = (config.headers || {}).isToken === false
// 鏄惁闇�瑕侀槻姝㈡暟鎹噸澶嶆彁浜�
const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
- if (getToken() && !isToken) {
+
+
+
+ if (!isToken && getToken()) {
config.headers['Authorization'] = 'Bearer ' + getToken() // 璁╂瘡涓姹傛惡甯﹁嚜瀹氫箟token 璇锋牴鎹疄闄呮儏鍐佃嚜琛屼慨鏀�
}
// get璇锋眰鏄犲皠params鍙傛暟
diff --git a/ruoyi-ui/src/views/anonymous/test.vue b/ruoyi-ui/src/views/anonymous/test.vue
new file mode 100644
index 0000000..eaf8e11
--- /dev/null
+++ b/ruoyi-ui/src/views/anonymous/test.vue
@@ -0,0 +1,211 @@
+<template>
+ <div class="anonymous-container">
+ <div class="test-card">
+ <h2 class="card-title">鍖垮悕璁块棶娴嬭瘯</h2>
+ <div class="form-content">
+ <div class="form-item">
+ <label>搴旂敤ID锛�</label>
+ <input v-model="form.appId" placeholder="璇疯緭鍏ュ簲鐢↖D" class="input-field" />
+ </div>
+ <div class="form-actions">
+ <button class="btn btn-primary" @click="handleTest">娴嬭瘯璁块棶</button>
+ <button class="btn btn-success" @click="handleGenerateSign">鐢熸垚绛惧悕</button>
+ </div>
+ </div>
+
+ <!-- 鏄剧ず绛惧悕淇℃伅 -->
+ <div v-if="signInfo" class="info-card">
+ <h3>绛惧悕淇℃伅</h3>
+ <div class="info-item">
+ <span class="label">鏃堕棿鎴筹細</span>
+ <span class="value">{{ signInfo.timestamp }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">绛惧悕锛�</span>
+ <span class="value">{{ signInfo.sign }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">绛惧悕瀛楃涓诧細</span>
+ <span class="value">{{ signInfo.signStr }}</span>
+ </div>
+ </div>
+
+ <!-- 鏄剧ず娴嬭瘯缁撴灉 -->
+ <div v-if="testResult" class="info-card">
+ <h3>娴嬭瘯缁撴灉</h3>
+ <pre class="result-content">{{ JSON.stringify(testResult, null, 2) }}</pre>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+import { generateSign, anonymousTest } from '@/api/anonymous'
+import { Message } from 'element-ui'
+
+export default {
+ name: 'AnonymousTest',
+ data() {
+ return {
+ form: {
+ appId: ''
+ },
+ signInfo: null,
+ testResult: null
+ }
+ },
+ methods: {
+ // 鐢熸垚绛惧悕
+ handleGenerateSign() {
+ if (!this.form.appId) {
+ Message.warning('璇疯緭鍏ュ簲鐢↖D')
+ return
+ }
+ generateSign(this.form.appId).then(response => {
+ this.signInfo = response.data
+ Message.success('绛惧悕鐢熸垚鎴愬姛')
+ })
+ },
+ // 娴嬭瘯鍖垮悕璁块棶
+ handleTest() {
+ if (!this.signInfo) {
+ Message.warning('璇峰厛鐢熸垚绛惧悕')
+ return
+ }
+ const params = {
+ appId: this.form.appId,
+ sign: this.signInfo.sign,
+ timestamp: this.signInfo.timestamp
+ }
+ anonymousTest(params).then(response => {
+ this.testResult = response
+ Message.success('娴嬭瘯鎴愬姛')
+ })
+ }
+ }
+}
+</script>
+
+<style scoped>
+.anonymous-container {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ min-height: 100vh;
+ background-color: #f0f2f5;
+ padding: 20px;
+}
+
+.test-card {
+ background: white;
+ border-radius: 8px;
+ box-shadow: 0 2px 12px 0 rgba(0,0,0,0.1);
+ padding: 30px;
+ width: 100%;
+ max-width: 600px;
+}
+
+.card-title {
+ margin: 0 0 20px;
+ color: #333;
+ text-align: center;
+}
+
+.form-content {
+ margin-bottom: 20px;
+}
+
+.form-item {
+ margin-bottom: 15px;
+}
+
+.form-item label {
+ display: block;
+ margin-bottom: 5px;
+ color: #606266;
+}
+
+.input-field {
+ width: 100%;
+ padding: 8px 12px;
+ border: 1px solid #dcdfe6;
+ border-radius: 4px;
+ font-size: 14px;
+ transition: border-color 0.2s;
+}
+
+.input-field:focus {
+ outline: none;
+ border-color: #409eff;
+}
+
+.form-actions {
+ display: flex;
+ gap: 10px;
+ margin-top: 20px;
+}
+
+.btn {
+ padding: 8px 20px;
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
+ font-size: 14px;
+ transition: opacity 0.2s;
+}
+
+.btn:hover {
+ opacity: 0.8;
+}
+
+.btn-primary {
+ background-color: #409eff;
+ color: white;
+}
+
+.btn-success {
+ background-color: #67c23a;
+ color: white;
+}
+
+.info-card {
+ margin-top: 20px;
+ padding: 15px;
+ background: #f8f9fa;
+ border-radius: 4px;
+}
+
+.info-card h3 {
+ margin: 0 0 15px;
+ color: #333;
+ font-size: 16px;
+}
+
+.info-item {
+ margin: 10px 0;
+ line-height: 1.5;
+}
+
+.label {
+ font-weight: bold;
+ color: #606266;
+ margin-right: 10px;
+}
+
+.value {
+ font-family: monospace;
+ color: #666;
+ word-break: break-all;
+}
+
+.result-content {
+ background-color: #f5f7fa;
+ padding: 15px;
+ border-radius: 4px;
+ margin: 10px 0 0;
+ overflow-x: auto;
+ font-family: monospace;
+ font-size: 13px;
+ line-height: 1.5;
+}
+</style>
--
Gitblit v1.9.1