JavaWebToken.java 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package com.shawn.util;
  2. import io.jsonwebtoken.Jwts;
  3. import io.jsonwebtoken.SignatureAlgorithm;
  4. import org.slf4j.Logger;
  5. import org.slf4j.LoggerFactory;
  6. import javax.crypto.spec.SecretKeySpec;
  7. import javax.xml.bind.DatatypeConverter;
  8. import java.security.Key;
  9. import java.util.Map;
  10. public class JavaWebToken {
  11. private static Logger log = LoggerFactory.getLogger(JavaWebToken.class);
  12. //该方法使用HS256算法和Secret:bankgl生成signKey
  13. private static Key getKeyInstance() {
  14. //We will sign our JavaWebToken with our ApiKey secret
  15. SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
  16. byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("bankgl");
  17. Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
  18. return signingKey;
  19. }
  20. //使用HS256签名算法和生成的signingKey最终的Token,claims中是有效载荷
  21. public static String createJavaWebToken(Map<String, Object> claims) {
  22. return Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS256, getKeyInstance()).compact();
  23. }
  24. //解析Token,同时也能验证Token,当验证失败返回null
  25. public static Map<String, Object> parserJavaWebToken(String jwt) {
  26. try {
  27. Map<String, Object> jwtClaims =
  28. Jwts.parser().setSigningKey(getKeyInstance()).parseClaimsJws(jwt).getBody();
  29. return jwtClaims;
  30. } catch (Exception e) {
  31. log.error("json web token verify failed");
  32. return null;
  33. }
  34. }
  35. }