fix: 优化token错误提醒

This commit is contained in:
fit2cloud-chenyw 2021-06-04 12:20:03 +08:00
parent df0d2a9b22
commit ef769da27d
5 changed files with 32 additions and 83 deletions

View File

@ -6,6 +6,7 @@ import io.dataease.auth.entity.TokenInfo;
import io.dataease.auth.service.AuthUserService;
import io.dataease.auth.util.JWTUtils;
import io.dataease.commons.utils.CommonBeanFactory;
import io.dataease.commons.utils.LogUtil;
import io.dataease.i18n.Translator;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authc.AuthenticationException;
@ -72,10 +73,11 @@ public class JWTFilter extends BasicHttpAuthenticationFilter {
boolean loginSuccess = executeLogin(request, response);
return loginSuccess;
} catch (Exception e) {
LogUtil.error(e);
if (e instanceof AuthenticationException && StringUtils.equals(e.getMessage(), expireMessage)){
responseExpire(request, response);
responseExpire(request, response, e);
}else {
response401(request, response);
tokenError(request, response, e);
}
}
}
@ -125,29 +127,17 @@ public class JWTFilter extends BasicHttpAuthenticationFilter {
return super.preHandle(request, response);
}
/**
* 将非法请求跳转到 /401
*/
private void response401(ServletRequest req, ServletResponse resp) {
try {
HttpServletResponse httpServletResponse = (HttpServletResponse) resp;
httpServletResponse.addHeader("Access-Control-Expose-Headers", "authentication-status");
httpServletResponse.setHeader("authentication-status", "invalid");
httpServletResponse.setStatus(401);
} catch (Exception e) {
LOGGER.error(e.getMessage());
}
private void tokenError(ServletRequest req, ServletResponse resp, Exception e1) {
HttpServletResponse httpServletResponse = (HttpServletResponse) resp;
httpServletResponse.addHeader("Access-Control-Expose-Headers", "authentication-status");
httpServletResponse.setHeader("authentication-status", "invalid");
}
private void responseExpire(ServletRequest req, ServletResponse resp) {
try {
HttpServletResponse httpServletResponse = (HttpServletResponse) resp;
httpServletResponse.addHeader("Access-Control-Expose-Headers", "authentication-status");
httpServletResponse.setHeader("authentication-status", "login_expire");
httpServletResponse.setStatus(401);
} catch (Exception e) {
LOGGER.error(e.getMessage());
}
private void responseExpire(ServletRequest req, ServletResponse resp, Exception e1) {
HttpServletResponse httpServletResponse = (HttpServletResponse) resp;
httpServletResponse.addHeader("Access-Control-Expose-Headers", "authentication-status");
httpServletResponse.setHeader("authentication-status", "login_expire");
}
}

View File

@ -285,7 +285,11 @@ export default {
char_can_not_more_50: 'Can not more 50 char',
share_success: 'Share Success',
input_id: 'Please input ID',
input_pwd: 'Please input password'
input_pwd: 'Please input password',
message_box: {
alert: 'Alert',
confirm: 'Confirm'
}
},
documentation: {
documentation: 'Documentation',

View File

@ -285,7 +285,11 @@ export default {
char_can_not_more_50: '不能超過50字符',
share_success: '分享成功',
input_id: '請輸入ID',
input_pwd: '請輸入密碼'
input_pwd: '請輸入密碼',
message_box: {
alert: '警告',
confirm: '確認'
}
},
documentation: {
documentation: '文檔',

View File

@ -285,7 +285,11 @@ export default {
char_can_not_more_50: '不能超过50字符',
share_success: '分享成功',
input_id: '请输入ID',
input_pwd: '请输入密码'
input_pwd: '请输入密码',
message_box: {
alert: '警告',
confirm: '确认'
}
},
documentation: {
documentation: '文档',

View File

@ -57,7 +57,7 @@ const checkAuth = response => {
if (response.headers['authentication-status'] === 'login_expire') {
const message = i18n.t('login.expires')
store.dispatch('user/setLoginMsg', message)
// store.dispatch('user/setLoginMsg', message)
$alert(message, () => {
store.dispatch('user/logout').then(() => {
location.reload()
@ -65,7 +65,7 @@ const checkAuth = response => {
})
}
if (response.headers['authentication-status'] === 'invalid' || response.status === 401) {
if (response.headers['authentication-status'] === 'invalid') {
const message = i18n.t('login.tokenError')
$alert(message, () => {
store.dispatch('user/logout').then(() => {
@ -85,59 +85,6 @@ const checkAuth = response => {
}
}
const checkPermission = response => {
// 请根据实际需求修改
if (response.status === 404) {
location.href = '/404'
}
if (response.status === 401) {
location.href = '/401'
}
}
// response interceptor
/**
service.interceptors.response.use(
response => {
const res = response.data
// if the custom code is not 20000, it is judged as an error.
if (res.code !== 20000) {
Message({
message: res.message || 'Error',
type: 'error',
duration: 5 * 1000
})
// 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
// to re-login
MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', {
confirmButtonText: 'Re-Login',
cancelButtonText: 'Cancel',
type: 'warning'
}).then(() => {
store.dispatch('user/resetToken').then(() => {
location.reload()
})
})
}
return Promise.reject(new Error(res.message || 'Error'))
} else {
return res
}
},
error => {
console.log('err' + error) // for debug
Message({
message: error.message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
*/
// 请根据实际需求修改
service.interceptors.response.use(response => {
response.config.loading && tryHideLoading(store.getters.currentPath)
@ -148,12 +95,12 @@ service.interceptors.response.use(response => {
let msg
if (error.response) {
checkAuth(error.response)
checkPermission(error.response)
// checkPermission(error.response)
msg = error.response.data.message || error.response.data
} else {
msg = error.message
}
!error.config.hideMsg && $error(msg)
!error.config.hideMsg && (!error.config.headers['authentication-status']) && $error(msg)
return Promise.reject(error)
})
export default service