当前位置: 代码网 > it编程>编程语言>Java > SpringBoot+Vue中的Token续签机制

SpringBoot+Vue中的Token续签机制

2024年07月03日 Java 我要评论
在这个示例中,我们将使用spring boot作为后端框架,vue作为前端框架,演示如何在全栈应用中实现长短token的续签。1. spring boot后端1.1 长token的生成在spring

在这个示例中,我们将使用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续签内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com