這裏直接寫了一個JwtUtil工具類,省略攔截器操做及控制層操做java
public class JwtUtil { /** * 過時時間15分鐘 */ private static final long EXPIRE_TIME = 15 * 60 * 1000; /** * token私鑰 */ private static final String TOKEN_SECRET="DD5654D654DSD5S1D65S4D65S1D"; /** * 生成簽名15分鐘後過時 * * @param userName 用戶名 * @param userId 用戶ID * @return 加密的token */ public static String sign(String userName,String userId){ try { //過時時間 Date date =new Date(System.currentTimeMillis()+EXPIRE_TIME); //私鑰及加密算法 Algorithm algorithm=Algorithm.HMAC256(TOKEN_SECRET); //設置頭部信息 Map<String,Object> header=new HashMap<>(2); header.put("typ","JWT"); header.put("alg","hs256"); //附帶userName userId信息,生成簽名 return JWT.create() .withHeader(header) .withClaim("userName",userName) .withClaim("userId",userId) .withExpiresAt(date) .sign(algorithm); }catch (Exception ex){ return null; } } /** * 校驗token是否正確 * * @param token 密鑰 * @return 是否正確 */ public static boolean verify(String token){ try{ Algorithm algorithm=Algorithm.HMAC256(TOKEN_SECRET); JWTVerifier verifier=JWT.require(algorithm) .build(); DecodedJWT JWT=verifier.verify(token); return true; }catch (Exception ex){ return false; } } /** * 獲取token中的信息無需secret解密也能獲取 * * @param token 密鑰 * @return token中包含的用戶名 */ public static String getUserName(String token){ try { DecodedJWT jwt=JWT.decode(token); return jwt.getClaim("userName").asString(); }catch (JWTDecodeException ex){ return null; } } /** * 獲取token中的信息無需secret解密也能獲取 * * @param token 密鑰 * @return token中包含的用戶ID */ public static String getUserId(String token){ try { DecodedJWT jwt=JWT.decode(token); return jwt.getClaim("userId").asString(); }catch (JWTDecodeException ex){ return null; } } }