当前位置: 首页 > 后端技术 > Java

javajwttoken

时间:2023-04-01 19:47:26 Java

的使用依赖引入com.auth0java-jwt3.18.1我用的是auth0的jwt包。代币生成publicStringgenerateJwtToken(LonguserId,Integerlevel){算法algorithm=Algorithm.HMAC256(salt);现在日期=新日期();Stringtoken=JWT.create().withIssuedAt(now).withClaim("userId",userId).withClaim("level",level).withExpiresAt(getExpiredDate(now)).sign(algorithm);返回令牌;}生成token如上代码所示,首先指定算法(需要使用随机字符串作为salt),然后在链中调用withIssuedAt()设置发行时间;withClaim()设置token携带的参数,可以是用户名等信息;withExpiresAt()设置令牌过期的时间点。令牌解密publicMapdecodeToken(StringjwtToken){Algorithmalgorithm=Algorithm.HMAC256(salt);JWTVerifierjwtVerifier=JWT.require(algorithm).build();尝试{DecodedJWTdecodedJWT=jwtVerifier.verify(jwtToken);返回decodedJWT.getClaims();}catch(Exceptione){e.printStackTrace();log.error("令牌验证失败");抛出新的UnAuthenticatedException(10004);解密使用的算法与加密一致,然后调用JWTVerifier的verify()方法对DecodedJWT对象进行解密,其getClaims()方法用于获取由以下组成的Map加密时设置的参数。Map的key是名称,使用Claim类的asInt()、asLong()等方法按类型导出参数,类型要与加密保持一致。如果令牌不正确或过期,则verify()方法将抛出异常。