TokenSign.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package com.huimv.admin.common.token;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import io.jsonwebtoken.*;
  4. import org.apache.commons.lang.StringUtils;
  5. import javax.servlet.http.HttpServletRequest;
  6. import java.util.Date;
  7. public class TokenSign {
  8. /**
  9. * 过期时间60分钟
  10. */
  11. private static final long EXPIRE_TIME= 24 * 60 * 60 * 1000;
  12. /**
  13. * 私钥,使用它生成token,最好进行下加密
  14. */
  15. private static final String TOKEN_SECRET="Token";
  16. private static final String APP_SECRET = "ukc8BDbRigUDaY6pZFfWus2jZWLPHO";
  17. private static final int REFRESH_TIME = 300;
  18. /**
  19. * 产生token
  20. * @return
  21. */
  22. public static String sign(String userName,Integer id,String farmIds){
  23. String JwtToken = Jwts.builder()
  24. //头部信息
  25. .setHeaderParam("typ", "JWT")
  26. .setHeaderParam("alg", "HS256")
  27. .setSubject("hm-user")
  28. .setIssuedAt(new Date())
  29. //过期时间
  30. .setExpiration(new Date(System.currentTimeMillis() + EXPIRE_TIME))
  31. //token主体部分,存储用户信息
  32. .claim("userName", userName)
  33. .claim("id",id)
  34. .claim("farmIds",farmIds)
  35. .signWith(SignatureAlgorithm.HS256, APP_SECRET)
  36. .compact();
  37. return JwtToken;
  38. }
  39. /**
  40. * token校验是否正确
  41. * @param token
  42. * @return
  43. */
  44. public static boolean verify(String token){
  45. if (StringUtils.isBlank(token)) {
  46. return false;
  47. }
  48. try {
  49. Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(token);
  50. } catch (Exception e) {
  51. e.printStackTrace();
  52. return false;
  53. }
  54. return true;
  55. }
  56. /**
  57. * 根据token获取会员id
  58. *
  59. * @param request
  60. * @return
  61. */
  62. public static Integer getMemberIdByJwtToken(HttpServletRequest request) {
  63. String jwtToken = request.getHeader("accessToken");
  64. if (StringUtils.isBlank(jwtToken)) {
  65. return null;
  66. }
  67. Claims claims = getClaims(jwtToken);
  68. if(ObjectUtil.isEmpty(claims)||ObjectUtil.isEmpty(claims.get("id"))){
  69. }
  70. return (Integer) claims.get("id");
  71. }
  72. public static String getFarmIds(HttpServletRequest request) {
  73. String jwtToken = request.getHeader("accessToken");
  74. if (StringUtils.isBlank(jwtToken)) {
  75. return null;
  76. }
  77. Claims claims = getClaims(jwtToken);
  78. return (String) claims.get("farmIds");
  79. }
  80. /**
  81. * 获取claims对象
  82. *
  83. * @param jwtToken
  84. * @return
  85. */
  86. public static Claims getClaims(String jwtToken) {
  87. try {
  88. Jws<Claims> claimsJws = Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
  89. return claimsJws.getBody();
  90. }catch (Exception e){
  91. return null;
  92. }
  93. }
  94. /**
  95. * 是否过期
  96. *
  97. * @param claims
  98. * @return -1:有效,0:有效,1:过期,2:被篡改
  99. */
  100. public static int verifyToken(Claims claims) {
  101. if (claims == null) {
  102. return 1;
  103. }
  104. try {
  105. claims.getExpiration()
  106. .before(new Date());
  107. // 需要自动刷新TOKEN
  108. if ((claims.getExpiration().getTime() - System.currentTimeMillis()) < REFRESH_TIME * 1000) {
  109. return -1;
  110. } else {
  111. return 0;
  112. }
  113. } catch (ExpiredJwtException ex) {
  114. return 1;
  115. } catch (Exception e) {
  116. return 2;
  117. }
  118. }
  119. }