655ae1cfeacc85e9a2a2ee23eb764fc441f84213.svn-base 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package cn.com.goldenwater.dcproj.utils;
  2. import cn.com.goldenwater.dcproj.dto.LoginUser;
  3. import io.jsonwebtoken.*;
  4. import java.util.Base64;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. public class JWTTokenUtil {
  8. public static final String SECRET = "goldenwatercomcn";
  9. private static final String EXP = "exp";
  10. private static final String PAYLOAD = "payload";
  11. //浙江要求将在线时间加长,在线4小时
  12. public static final long maxAge = 14400000L;
  13. public static final long refreshmaxAge = 14400000000L;
  14. public static String encode(LoginUser loginUser, String key) {
  15. if (SECRET != null && SECRET.length() > 0) {
  16. key += SECRET;
  17. }
  18. //生成签名部分
  19. JwtBuilder jwtBuilder = Jwts.builder();
  20. Map<String, Object> clams = new HashMap<>();
  21. clams.put("persId", new String(base64Encrypt(loginUser.getPersId())));
  22. clams.put("persName", new String(base64Encrypt(loginUser.getPersName())));
  23. clams.put("mobile", new String(base64Encrypt(loginUser.getMobile())));
  24. clams.put("pType", new String(base64Encrypt(loginUser.getpType())));
  25. clams.put(EXP, System.currentTimeMillis() + maxAge);
  26. jwtBuilder = jwtBuilder.addClaims(clams).signWith(SignatureAlgorithm.HS256, key);
  27. //获取生成的token
  28. String token = jwtBuilder.compact();
  29. return token;
  30. }
  31. public static byte[] base64Encrypt(final String content) {
  32. return Base64.getEncoder().encode(content.getBytes());
  33. }
  34. /**
  35. * base64解密
  36. *
  37. * @param encoderContent 已加密内容
  38. * @return byte[]
  39. */
  40. public static byte[] base64Decrypt(final byte[] encoderContent) {
  41. return Base64.getDecoder().decode(encoderContent);
  42. }
  43. public static Map<String, Object> decode(String key, String token) throws SignatureException {
  44. Claims claims = null;
  45. if (SECRET != null && SECRET.length() > 0) {
  46. key += SECRET;
  47. }
  48. claims = Jwts.parser().setSigningKey(key).parseClaimsJws(token).getBody();
  49. return claims;
  50. }
  51. public static String sign(LoginUser object, String keyDesc) {
  52. try {
  53. return encode(object, keyDesc);
  54. } catch (Exception e) {
  55. return null;
  56. }
  57. }
  58. //解密,传入一个加密后的token字符串和解密后的类型
  59. public static LoginUser unsign(String jwt, String keyDesc) {
  60. try {
  61. Map<String, Object> retMap = decode(keyDesc, jwt);
  62. LoginUser loginUser = new LoginUser();
  63. loginUser.setMobile(new String(base64Decrypt(retMap.get("mobile").toString().getBytes())));
  64. loginUser.setPersId(new String(base64Decrypt(retMap.get("persId").toString().getBytes())));
  65. loginUser.setPersName(new String(base64Decrypt(retMap.get("persName").toString().getBytes())));
  66. loginUser.setpType(new String(base64Decrypt(retMap.get("pType").toString().getBytes())));
  67. long expire = Long.valueOf(retMap.get(EXP).toString());
  68. long currentTimeMillis = System.currentTimeMillis();
  69. if (expire > currentTimeMillis) {
  70. return loginUser;
  71. }
  72. return null;
  73. } catch (Exception e) {
  74. return null;
  75. }
  76. }
  77. //获取对象
  78. public static LoginUser getObject(String accessToken, String keyDesc) {
  79. Map<String, Object> retMap = decode(keyDesc, accessToken);
  80. LoginUser loginUser = new LoginUser();
  81. loginUser.setMobile(new String(base64Decrypt(retMap.get("mobile").toString().getBytes())));
  82. loginUser.setPersId(new String(base64Decrypt(retMap.get("persId").toString().getBytes())));
  83. loginUser.setPersName(new String(base64Decrypt(retMap.get("persName").toString().getBytes())));
  84. loginUser.setpType(new String(base64Decrypt(retMap.get("pType").toString().getBytes())));
  85. return loginUser;
  86. }
  87. }