Java中如何让令牌有效性校验函数返回布尔值而非void?
实现JWT校验返回布尔值的方案
你只需要把原方法的返回类型改为boolean,通过try-catch捕获JWT校验时抛出的异常来实现:
原方法调用parseClaimsJws(token)时,令牌无效(签名错误、格式错误、过期等)会抛出JwtException或其子类(比如ExpiredJwtException、SignatureException),我们只需在try块中执行校验逻辑,成功则返回true;捕获这些异常时返回false即可。
修改后的代码示例:
import io.jsonwebtoken.JwtException; import io.jsonwebtoken.Jwts; public boolean validateToken(final String token) { try { Jwts.parserBuilder().setSigningKey(getSignKey()).build().parseClaimsJws(token); return true; } catch (JwtException | IllegalArgumentException e) { // JWT无效或参数非法时返回false return false; } }
说明:
- 捕获
JwtException可以覆盖所有JJWT库抛出的JWT相关异常(签名无效、令牌过期、格式错误等) - 额外捕获
IllegalArgumentException是因为当传入null或空字符串时,parseClaimsJws会抛出该异常 - 不要盲目捕获
Exception,避免吞掉其他非JWT相关的运行时异常,保持代码的健壮性
内容的提问来源于stack exchange,提问作者Abhijit Mondal Abhi
相关产品推荐
相关产品推荐

