diff --git a/backend/src/main/java/io/dataease/auth/server/AuthServer.java b/backend/src/main/java/io/dataease/auth/server/AuthServer.java index ac43dc69ce..e86731d06f 100644 --- a/backend/src/main/java/io/dataease/auth/server/AuthServer.java +++ b/backend/src/main/java/io/dataease/auth/server/AuthServer.java @@ -12,6 +12,7 @@ import io.dataease.auth.service.AuthUserService; import io.dataease.auth.util.JWTUtils; import io.dataease.auth.util.RsaUtil; import io.dataease.commons.constants.SysLogConstants; +import io.dataease.commons.exception.DEException; import io.dataease.commons.utils.*; import io.dataease.controller.sys.request.LdapAddRequest; import io.dataease.exception.DataEaseException; @@ -240,8 +241,13 @@ public class AuthServer implements AuthApi { HttpServletRequest request = ServletUtils.request(); String idToken = request.getHeader("IdToken"); if (StringUtils.isNotBlank(idToken)) { - OidcXpackService oidcXpackService = SpringContextUtil.getBean(OidcXpackService.class); - oidcXpackService.logout(idToken); + try { + OidcXpackService oidcXpackService = SpringContextUtil.getBean(OidcXpackService.class); + oidcXpackService.logout(idToken); + } catch (Exception e) { + LogUtil.error(e.getMessage(), e); + DEException.throwException("oidc_logout_error"); + } } } @@ -253,11 +259,16 @@ public class AuthServer implements AuthApi { String result = null; Integer defaultLoginType = systemParameterService.defaultLoginType(); if (defaultLoginType == 3 && isOpenCas()) { - HttpServletRequest request = ServletUtils.request(); - HttpSession session = request.getSession(); - session.invalidate(); - CasXpackService casXpackService = SpringContextUtil.getBean(CasXpackService.class); - result = casXpackService.logout(); + try { + HttpServletRequest request = ServletUtils.request(); + HttpSession session = request.getSession(); + session.invalidate(); + CasXpackService casXpackService = SpringContextUtil.getBean(CasXpackService.class); + result = casXpackService.logout(); + } catch (Exception e) { + LogUtil.error(e.getMessage(), e); + DEException.throwException("cas_logout_error"); + } } try { Long userId = JWTUtils.tokenInfoByToken(token).getUserId(); diff --git a/frontend/src/api/user.js b/frontend/src/api/user.js index 32d2067307..f7b0df9167 100644 --- a/frontend/src/api/user.js +++ b/frontend/src/api/user.js @@ -18,14 +18,16 @@ export function getInfo(token) { export function logout() { return request({ url: '/api/auth/logout', - method: 'post' + method: 'post', + hideMsg: true }) } export function deLogout() { return request({ url: '/api/auth/deLogout', - method: 'post' + method: 'post', + hideMsg: true }) } diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 4813e90f42..a4620f5b4a 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -2625,6 +2625,7 @@ export default { search_by_keyword: 'Search by keyword', apply_logs: 'Apply logs', app_group_delete_tips: 'Are you sure to delete this application category?', + app_group_delete_content: 'After deletion, all application templates in this category will also be deleted.', panel_position: 'Panel position', panel_name: 'Panel name', @@ -2636,5 +2637,13 @@ export default { panel: 'Panel', log_delete_tips: 'Are you sure to delete this application record?', log_resource_delete_tips: 'Delete related resources (irrecoverable after deletion)' + + }, + <<<<<<< pr@dev@fix_oidc_exit_error + app_group_delete_content: 'After deletion, all application templates in this category will also be deleted.' + }, + logout: { + oidc_logout_error: 'OIDC failed to exit, do you continue to exit DataEase?', + cas_logout_error: 'The CAS service is abnormal, please contact the administrator!' } } diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 4471ffd44f..b3fe7c44dd 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -2626,6 +2626,7 @@ export default { search_by_keyword: '通過關鍵字搜索', apply_logs: '應用記錄', app_group_delete_tips: '確定刪除該應用分類嗎?', + app_group_delete_content: '刪除後,該分類中所有的應用模板也將被刪除。', panel_position: '儀表板位置', panel_name: '儀表板名稱', @@ -2637,5 +2638,11 @@ export default { panel: '儀表板', log_delete_tips: '確定刪除該條應用記錄嗎?', log_resource_delete_tips: '刪除相關資源(刪除後不可恢復)' + + }, + + logout: { + oidc_logout_error: 'OIDC退出失敗,是否繼續退出DataEase?', + cas_logout_error: 'CAS服務異常,請聯系管理員!' } } diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 639bbd037b..87bdeea425 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -2626,6 +2626,7 @@ export default { search_by_keyword: '通过关键字搜索', apply_logs: '应用记录', app_group_delete_tips: '确定删除该应用分类吗?', + app_group_delete_content: '删除后,该分类中所有的应用模板也将被删除。', panel_position: '仪表板位置', panel_name: '仪表板名称', @@ -2637,5 +2638,11 @@ export default { panel: '仪表板', log_delete_tips: '确定删除该条应用记录吗?', log_resource_delete_tips: '删除相关资源(删除后不可恢复)' + + }, + + logout: { + oidc_logout_error: 'OIDC退出失败,是否继续退出DataEase?', + cas_logout_error: 'CAS服务异常,请联系管理员!' } } diff --git a/frontend/src/store/modules/user.js b/frontend/src/store/modules/user.js index a14a2db029..5d8795d358 100644 --- a/frontend/src/store/modules/user.js +++ b/frontend/src/store/modules/user.js @@ -6,6 +6,7 @@ import { getLanguage } from '@/lang/index' import Cookies from 'js-cookie' import router from '@/router' import i18n from '@/lang' +import { $alert, $confirm } from '@/utils/message' const getDefaultState = () => { return { token: getToken(), @@ -146,6 +147,28 @@ const actions = { resolve(res.data) }).catch(error => { reject(error) + if (error?.response?.data?.message) { + if (error.response.data.message === ('oidc_logout_error')) { + const message = i18n.t('logout.' + error.response.data.message) + $confirm(message, () => { + removeToken() // must remove token first + resetRouter() + commit('RESET_STATE') + window.location.href = '/' + }, { + confirmButtonText: i18n.t('commons.confirm') + }) + } + if (error.response.data.message === ('cas_logout_error')) { + const message = i18n.t('logout.' + error.response.data.message) + $alert(message, () => { + + }, { + confirmButtonText: i18n.t('commons.confirm'), + showClose: false + }) + } + } }) }) },