1. 刷新JWT Token过期时间

JWT Token过期时间可以在生成Token时设置,一般情况下,Token的过期时间为一定时间后,需要重新生成Token。但是,如果用户在Token过期前进行了一些操作,我们希望可以更新Token的过期时间。

一种常见的做法是,在Token中添加一个"exp"字段,存储Token的过期时间戳。当Token过期前,可以将Token的"exp"字段更新为新的过期时间戳。代码如下:

public static String refreshToken(String token, long expireTime) {
    // 解析Token
    Claims claims = Jwts.parser()
            .setSigningKey(SECRET_KEY)
            .parseClaimsJws(token)
            .getBody();
    // 更新"exp"字段
    long now = System.currentTimeMillis();
    claims.setExpiration(new Date(now + expireTime));
    // 重新生成Token
    return Jwts.builder()
            .setClaims(claims)
            .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
            .compact();
}
  1. 更换JWT Token

如果Token被盗用或者用户注销了登录状态,需要更换Token。更换Token的做法是,重新生成一个新的Token,旧的Token失效。

代码如下:

public static String generateToken(User user) {
    // 设置Token过期时间
    long now = System.currentTimeMillis();
    Date expireDate = new Date(now + EXPIRATION_TIME);
    // 构造Token
    return Jwts.builder()
            .setSubject(user.getUsername())
            .setExpiration(expireDate)
            .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
            .compact();
}
  1. Uniapp更新Token后重新发送请求

在Uniapp中,可以使用拦截器对请求进行拦截,检查是否有Token,并且更新Token。

代码如下:

import store from '@/store'

const tokenInterceptor = (config) => {
  // 获取Token
  const token = store.state.token
  if (token) {
    // 在请求头中添加Token
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
}

const refreshTokenInterceptor = (error) => {
  // 检查是否需要更新Token
  const response = error.response
  if (response.status === 401) {
    // 更新Token
    const token = response.headers['new-token']
    store.commit('setToken', token)
    // 重新发送请求
    const config = error.config
    config.headers.Authorization = `Bearer ${token}`
    return uni.request(config)
  }
  return Promise.reject(error)
}

export { tokenInterceptor, refreshTokenInterceptor }

在使用Uniapp发送请求时,可以添加拦截器,代码如下:

import { tokenInterceptor, refreshTokenInterceptor } from '@/interceptors/token'

uni.request({
  url: 'https://example.com/api',
  method: 'GET',
  interceptor: {
    request: tokenInterceptor,
    responseError: refreshTokenInterceptor
  }
})

这样,在每次发送请求时,都会检查是否有Token,并且更新Token。如果Token过期,会自动重新获取新的Token并且重新发送请求

后端java 微信小程序使用 jwt token如何刷新token过期时间如何更换token保持请求发送成功后前端uniapp如何在更新token后重新发送请求详细代码

原文地址: https://www.cveoy.top/t/topic/fGEp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录