diff --git a/src/enums/pageEnum.ts b/src/enums/pageEnum.ts index d74074d..51285a9 100644 --- a/src/enums/pageEnum.ts +++ b/src/enums/pageEnum.ts @@ -15,3 +15,10 @@ export enum PageEnum { // 错误页面路径 ERROR_PAGE = '/exception', } + +export enum SsoLoginPageEnum { + // KICS系统登陆路径 + SSO_KICS_LOGIN = '/sso/login/kics', + // KLAB系统登陆路径 + SSO_KLAB_LOGIN = '/sso/login/klab', +} diff --git a/src/router/guard/permissionGuard.ts b/src/router/guard/permissionGuard.ts index 2dc6516..4ce3292 100644 --- a/src/router/guard/permissionGuard.ts +++ b/src/router/guard/permissionGuard.ts @@ -8,21 +8,35 @@ import type { Router, RouteRecordRaw } from 'vue-router'; import { usePermissionStoreWithOut } from '/@/store/modules/permission'; -import { PageEnum } from '/@/enums/pageEnum'; +import { PageEnum, SsoLoginPageEnum } from '/@/enums/pageEnum'; import { useUserStoreWithOut } from '/@/store/modules/user'; import { RootRoute } from '/@/router/routes'; import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; +import { setObjToUrlParams } from '/@/utils'; +import { AesEncryption } from '/@/utils/cipher'; +import { cacheCipher } from '/@/settings/encryptionSetting'; +type BasicPageEnum = PageEnum | SsoLoginPageEnum; const LOGIN_PATH = PageEnum.BASE_LOGIN; const ROOT_PATH = RootRoute.path; - +const ssoPathList: SsoLoginPageEnum[] = Object.values(SsoLoginPageEnum); /** 设置路由白名单 */ -const whitePathList: PageEnum[] = [ LOGIN_PATH ]; +const whitePathList: BasicPageEnum[] = [ LOGIN_PATH, ...ssoPathList ]; +const encryption = new AesEncryption({ key: cacheCipher.key, iv: cacheCipher.iv }); export function createPermissionGuard(router: Router) { const userStore = useUserStoreWithOut(); const permissionStore = usePermissionStoreWithOut(); router.beforeEach(async (to, from, next) => { + // 校验token权限信息 + const token = userStore.getAccessToken; + // sso重定向转发token进行登陆 + if(ssoPathList.includes(to.path as SsoLoginPageEnum) && token) { + return window.location.replace(to.query?.redirect ? setObjToUrlParams(to.query?.redirect as string, { + ticket: encryption.encryptByAES(token) + }) : '/'); + } + if ( // 如果指定首页路径数据不为空就代表已经登录直接放过 from.path === ROOT_PATH && @@ -33,8 +47,6 @@ export function createPermissionGuard(router: Router) { return next(userStore.getUserInfo.homePath); } - // 校验token权限信息 - const token = userStore.getAccessToken; // 放过白名单路由 if (whitePathList.includes(to.path as PageEnum)) { if (to.path === LOGIN_PATH && token) { @@ -45,9 +57,7 @@ export function createPermissionGuard(router: Router) { next((to.query?.redirect as string) || '/'); return; } - } catch { - // - } + } catch {} } return next(); } diff --git a/src/router/guard/stateGuard.ts b/src/router/guard/stateGuard.ts index 93c257a..7987d52 100644 --- a/src/router/guard/stateGuard.ts +++ b/src/router/guard/stateGuard.ts @@ -11,13 +11,14 @@ import { useAppStore } from '/@/store/modules/app'; import { useMultipleTabStore } from '/@/store/modules/multipleTab'; import { useUserStore } from '/@/store/modules/user'; import { usePermissionStore } from '/@/store/modules/permission'; -import { PageEnum } from '/@/enums/pageEnum'; +import { PageEnum, SsoLoginPageEnum } from '/@/enums/pageEnum'; import { removeTabChangeListener } from '/@/logics/mitt/routeChange'; +const ssoPathList: SsoLoginPageEnum[] = Object.values(SsoLoginPageEnum); export function createStateGuard(router: Router) { router.afterEach((to) => { // 只需进入登录页面,清除认证信息即可 - if (to.path === PageEnum.BASE_LOGIN) { + if (to.path === PageEnum.BASE_LOGIN || ssoPathList.includes(to.path as SsoLoginPageEnum)) { const tabStore = useMultipleTabStore(); const userStore = useUserStore(); const appStore = useAppStore(); diff --git a/src/utils/index.ts b/src/utils/index.ts index 096a02d..e3e600f 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -31,8 +31,8 @@ export function getPopupContainer(node?: HTMLElement): HTMLElement { * @returns {string} * eg: * let obj = {a: '3', b: '4'} - * setObjToUrlParams('www.baidu.com', obj) - * ==>www.baidu.com?a=3&b=4 + * setObjToUrlParams('cn.vuejs.org', obj) + * ==>cn.vuejs.org?a=3&b=4 */ export function setObjToUrlParams(baseUrl: string, obj: any): string { let parameters = ''; diff --git a/src/views/system/ssoLogin/kics/index.vue b/src/views/system/ssoLogin/kics/index.vue index 7a1e993..c9ea762 100644 --- a/src/views/system/ssoLogin/kics/index.vue +++ b/src/views/system/ssoLogin/kics/index.vue @@ -1,6 +1,7 @@