前端给后台返回的接口携带token

本文档介绍了如何在前端项目中实现API接口的Token验证,包括在请求头中添加Token,检查响应状态码以处理Token过期情况,并在Token过期时弹框提示并跳转到登录页面。同时,展示了如何从sessionStorage中获取并使用Token,以及全局设置axios请求和响应拦截器来确保每个请求都携带Token。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

后台在接口中添加token验证 前端需要后台返回的所有接口请求都带token,而且这个都会携带一个默认过期时间,如果遇到token过期,就会返回一个错误提示码
在这里插入图片描述
如下对token指令进行判断 如果状态码 == 77777 就弹框 “令牌过期” 并直接跳转到登录页

if(res.code == 77777){
					this.$message({
						message: res.msg,
						type: 'warning'
					});
					this.$router.push('/login')
				}

然后我们查看sessionStorge 回查看到我们之前存储到本地的 token
在这里插入图片描述

之后我们在全局给请求头添加token

import axios from 'axios'


axios.interceptors.request.use(function (config) {
  config.headers = {
    'X-Requested-With': 'XMLHttpRequest',
    'Content-Type': 'application/json'
  };
   //注意使用token的时候需要引入cookie方法或者用本地localStorage等方法,推荐js-cookie
     const token = JSON.parse(window.sessionStorage.getItem('token')); //这里取token之前,你肯定需要先拿到token,存一下
     if (token) {
       //  config.params = {'token':token} //如果要求携带在参数中
       config.headers.Authorization = token; //如果要求携带在请求头中
     }
    // 在发送请求之前做些什么
    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    return response.data;
  }, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  });
  
export default axios;

这样每个接口返回给后台的请求都携带token

在这里插入图片描述

### 解决前端页面中无效 Token 的方法 当遇到前端页面中的无效 `token` 问题时,可以通过以下几种方式进行处理: #### 方法一:重新获取有效的 Token 在发现 `token` 无效的情况下,可以尝试通过接口向后端申请新的有效 `token`。以下是基于 jQuery 实现的一个简单示例[^1]。 ```javascript var jwt = ""; // 初始为空,在登录成功后赋值为后端返回的有效 token function refreshJwt() { $.ajax({ cache: false, type: "POST", url: "https://xxx.xxx.x.xxx/refresh_token", // 假设这是刷新 token 的 API 地址 datatype: "json", success: function (response) { if (response.token) { jwt = response.token; // 更新全局变量 jwt console.log("Token refreshed successfully"); } }, error: function () { alert("Failed to refresh token."); } }); } // 调用此函数前先检查当前 token 是否有效 function checkAndUseToken() { if (!jwt || jwt === "") { refreshJwt(); // 如果未初始化,则主动刷新一次 } $.ajax({ cache: false, type: "GET", headers: { "Authorization": jwt }, url: "https://xxx.xxx.x.xxx/login", datatype: "text", success: function (data) { alert("Success: " + data); }, error: function (xhr, status, error) { if (xhr.status === 401) { // 当收到 401 错误时表示 token 已失效 refreshJwt(); } else { alert("Error occurred: " + error); } } }); } ``` 上述代码逻辑是在检测到 `token` 失效(即 HTTP 状态码为 401)时自动触发 `refreshJwt()` 函数来更新 `token` 并重试请求。 --- #### 方法二:利用 API 网关的过期机制 API 网关通常会对 `token` 中的 `exp` 字段进行验证,一旦该字段超出了设定的时间范围(默认不超过 7 天),则会判定其无效并拒绝访问[^2]。因此可以在开发阶段注意以下几点: - **确保客户端及时刷新 `token`**:为了避免因 `exp` 过期而导致的服务中断,建议定期轮询服务器以延长或替换现有的 `token`。 - **调整后端策略**:如果业务场景允许较短生命周期的 `token`,可考虑引入短期 `access_token` 和长期 `refresh_token` 组合的方式实现无缝切换。 --- #### 方法三:借助 Spring Boot 自定义注解完成校验 对于采用 Java 技术栈的应用程序而言,可通过自定义注解配合拦截器的形式简化对非法 `token` 的捕获流程[^3]。例如下面展示了一个简单的控制器配置案例: ```java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @CheckToken // 使用自定义注解读取 header 中携带token 并执行合法性判断 @GetMapping("/user") public String getUserInfo() { return "User information retrieved."; } } ``` 在此基础上还需编写对应的切面类用于实际解析操作以及异常反馈过程。具体细节可以根据项目需求进一步扩展完善。 --- ### 总结 综上所述,针对前端页面中存在的无效 `token` 认证问题可以从多个角度出发加以应对。无论是从前端层面优化交互体验还是依托于后台架构设计增强安全性都具有重要意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值