在这个示例中,我们将使用spring boot作为后端框架,vue作为前端框架,演示如何在全栈应用中实现长短token的续签。
1. 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);
}
2. 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续签内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论