使用jjwt生成的token值,怎么解析明文不做过期校验处理??
在springboot中使用的是jjwt做的token,但是我想添加一个刷新token的机制,就是过期后,只要没有超过允许的范围内,可以再次生成一个新的token已达到刷新token的目的。
但是在生成新的token时,我需要在旧的token中解析出一些用户信息,用来生成新的token。但是在解析的时候总是抛出过期异常,有没有什么方法可以设置jjwt解析的时候,不做过期的校验
public static String getRefreshToken(String token) throws ParseException {
// 刷新token值
Claims body = Jwts.parser()
//设置签名的秘钥
.setSigningKey(TOKENKEY)
.parseClaimsJws(token)
.getBody(); // 从旧的token中解析出用户信息用于新token的生成
return "";
}
有没有什么方法可以让 Jwts.parser() 在解析时不要再做过期校验了。否则总是抛出异常,没法获取用户信息
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你可以在老的
jwt
失效的前一段时间,生成新的jwt
就可以了。后端返回新的响应头
new-jwt
,前端检测有该响应头,用该新值来替换本地老的jwt
之后再做请求就是新的
jwt
啦题主,你好,想要获取到
payload
,我觉得可以有以下两种方式,但是这两种方式的思考模式是不一样从
jwt
的定义出发在JWT官网的introduction中,我们不难发现,
jwt
是分3断的(header
,payload
以及signature
),而其中header
和payload
最终结果都是经过Base64Url
编码过的这是
header
的说明这是
payload
的说明而我们所需要的信息那肯定在
payload
中,所以我们如果仅仅想要获取到实际的payload
中的信息,我们是可以直接用Base64Url
解码就可以了,从题主给的parseClaimsJws(token)
方法入手我们也可以很快找到官方他们也是这样做的DefaultJwtParser.parse
292行从异常处理出发
第三方
jar
抛exception
况下,一般来说我们自己的业务系统都是需要去做一些exception
处理的,无论是转换为业务exception
抛出,还是说仅仅只是记录exception
,我们会针对别人提供的exception
来做定制的处理,而往往exception
不仅仅是指明了当前exception
场景,有时候还需要携带出当前exception
相关的参数的还是从
DefaultJwtParser.parse
出发,第411行,看到了过期校验抛出的是ExpiredJwtException
并且我们可以发现,抛出这个
exception
的构造参数是有claims
的,查看API
,发现有方法getClaims
,恰好就是返回的claims
所以这就很简单了,我们只需要
catch
住ExpiredJwtException
,然后e.getClaims
就可以获取到我们想要的参数了以上仅供参考~
和我的实现方式几乎一样啊。贴一段代码自己试试吧,jwt就是生成的token。