diff --git a/my-project-backend/src/main/java/com/example/filter/FlowLimitingFilter.java b/my-project-backend/src/main/java/com/example/filter/FlowLimitingFilter.java index f7aaceb..65e821d 100644 --- a/my-project-backend/src/main/java/com/example/filter/FlowLimitingFilter.java +++ b/my-project-backend/src/main/java/com/example/filter/FlowLimitingFilter.java @@ -45,7 +45,7 @@ public class FlowLimitingFilter extends HttpFilter { @Override protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { String address = request.getRemoteAddr(); - if (!tryCount(address)) + if ("OPTIONS".equals(request.getMethod()) && !tryCount(address)) this.writeBlockMessage(response); else chain.doFilter(request, response); @@ -72,9 +72,9 @@ public class FlowLimitingFilter extends HttpFilter { * @throws IOException 可能的异常 */ private void writeBlockMessage(HttpServletResponse response) throws IOException { - response.setStatus(HttpServletResponse.SC_FORBIDDEN); + response.setStatus(429); response.setContentType("application/json;charset=utf-8"); PrintWriter writer = response.getWriter(); - writer.write(RestBean.forbidden("操作频繁,请稍后再试").asJsonString()); + writer.write(RestBean.failure(429, "请求频率过快,请稍后再试").asJsonString()); } } diff --git a/my-project-frontend/src/net/index.js b/my-project-frontend/src/net/index.js index 29a4395..486f179 100644 --- a/my-project-frontend/src/net/index.js +++ b/my-project-frontend/src/net/index.js @@ -1,5 +1,6 @@ import axios from "axios"; import {ElMessage} from "element-plus"; +import router from "@/router"; const authItemName = "authorize" @@ -11,7 +12,12 @@ const accessHeader = () => { const defaultError = (error) => { console.error(error) - ElMessage.error('发生了一些错误,请联系管理员') + const status = error.response.status + if (status === 429) { + ElMessage.error(error.response.data.message) + } else { + ElMessage.error('发生了一些错误,请联系管理员') + } } const defaultFailure = (message, status, url) => { @@ -43,26 +49,37 @@ function storeAccessToken(remember, token, expire){ sessionStorage.setItem(authItemName, str) } -function deleteAccessToken() { +function deleteAccessToken(redirect = false) { localStorage.removeItem(authItemName) sessionStorage.removeItem(authItemName) + if(redirect) { + router.push({ name: 'welcome-login' }) + } } function internalPost(url, data, headers, success, failure, error = defaultError){ axios.post(url, data, { headers: headers }).then(({data}) => { - if(data.code === 200) + if(data.code === 200) { success(data.data) - else + } else if(data.code === 401) { + failure('登录状态已过期,请重新登录!') + deleteAccessToken(true) + } else { failure(data.message, data.code, url) + } }).catch(err => error(err)) } function internalGet(url, headers, success, failure, error = defaultError){ axios.get(url, { headers: headers }).then(({data}) => { - if(data.code === 200) + if(data.code === 200) { success(data.data) - else + } else if(data.code === 401) { + failure('登录状态已过期,请重新登录!') + deleteAccessToken(true) + } else { failure(data.message, data.code, url) + } }).catch(err => error(err)) }