-
SpringBoot+Vue中的Token续签机制
本文主要介绍了SpringBoot+Vue中的Token续签机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Java技术迷
在这个示例中,我们将使用Spring Boot作为后端框架,Vue作为前端框架,演示如何在全栈应用中实现长短Token的续签。
- Spring Boot后端
1.1 长Token的生成
在Spring Boot中,我们首先创建一个服务来生成JWT Token。使用jjwt库,确保在pom.xml文件中添加以下依赖:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
然后,创建JwtTokenService服务:
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Service;
import java.util.Date;
@Service
public class JwtTokenService {
private String secretKey = "your_secret_key";
public String generateLongToken(String username) {
long expiration = 7 * 24 * 60 * 60 * 1000; // 7 days
return Jwts.builder()
.setSubject(username)
.setExpiration(new Date(System.currentTimeMillis() + expiration))
.signWith(SignatureAlgorithm.HS256, secretKey)
.compact();
}
// ... 其他方法 ...
}
1.2 短Token的生成
添加生成短Token的方法:
public String generateShortToken(String username) {
long expiration = 15 * 60 * 1000; // 15 minutes
return Jwts.builder()
.setSubject(username)
.setExpiration(new Date(System.currentTimeMillis() + expiration))
.signWith(SignatureAlgorithm.HS256, secretKey)
.compact();
}
1.3 Token续签
创建一个方法用于续签Token:
public String renewToken(String oldToken) {
// 解析旧Token获取用户名
String username = Jwts.parser()
.setSigningKey(secretKey)
.parseClaimsJws(oldToken)
.getBody()
.getSubject();
// 生成新的短Token
return generateShortToken(username);
}
-
Vue前端
在Vue应用中,确保每次请求时都附加Token,并在需要时更新Token。
2.1 处理Token过期
在Vue应用中,可以使用拦截器来检查Token是否过期,如果过期则触发续签流程:
// main.js 或者其他入口文件
import Vue from 'vue';
import axios from 'axios';
// 设置axios拦截器
axios.interceptors.request.use(
config => {
// 在发送请求之前做些什么
const token = localStorage.getItem('token');
if (token) {
// 如果存在令牌,将其添加到请求头
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
error => {
// 对请求错误做些什么
return Promise.reject(error);
}
);
axios.interceptors.response.use(
response => {
// 对响应数据做些什么
return response;
},
error => {
// 对响应错误做些什么
const originalRequest = error.config;
if (error.response.status === 401 && !originalRequest._retry) {
// 如果响应状态为401(未授权)并且尚未重试过
originalRequest._retry = true;
// 发送续期请求
return axios.post('/api/renew-token')
.then(response => {
// 更新本地存储的令牌
updateLocalStorageToken(response.data.token);
// 重新发送原始请求
return axios(originalRequest);
});
}
return Promise.reject(error);
}
);
// 将axios添加到Vue的原型中,使其在组件中可以直接使用
Vue.prototype.$http = axios;
通过这个拦截器,我们在每次请求时就可以检查Token是否过期,如果过期则触发续签流程。这样就实现了在Vue前端应用中的Token续签机制。
到此这篇关于SpringBoot+Vue中的Token续签机制的文章就介绍到这了,更多相关SpringBoot Vue Token续签内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持
原文链接:https://blog.csdn.net/caicai687800/article/details/137346339
最新更新
redis中存储list<map>,list<entity>的处理
SpringBoot+Vue中的Token续签机制
Mybatis-Plus根据自定义注解实现自动加解密
详解SpringBoot同时可以处理多少请求
vbscript基础篇 - vbs数组Array的定义与使用方
vbscript基础篇 - vbs变量定义与使用方法
vbs能调用的系统对象小结
vbscript网页模拟登录效果代码
VBScript 根据IE窗口的标题输出ESC
杀死指定进程名称的小VBS
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比