Merge pull request #3469 from dataease/pr@dev@fix_oidc_exit_error

fix(登出): oidc宕机后无法退出系统
This commit is contained in:
xuwei-fit2cloud 2022-10-27 16:18:23 +08:00 committed by GitHub
commit 5b52ccac22
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 68 additions and 9 deletions

View File

@ -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();

View File

@ -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
})
}

View File

@ -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!'
}
}

View File

@ -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服務異常請聯系管理員'
}
}

View File

@ -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服务异常请联系管理员'
}
}

View File

@ -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
})
}
}
})
})
},