后端java 微信小程序使用 jwt token如何刷新token过期时间如何更换token保持请求发送成功后前端uniapp如何在更新token后重新发送请求详细代码
- 刷新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();
}
- 更换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();
}
- 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并且重新发送请求
原文地址: https://www.cveoy.top/t/topic/fGEp 著作权归作者所有。请勿转载和采集!