TokenSign.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. package com.huimv.receive.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. * 过期时间7天
  10. */
  11. private static final long EXPIRE_TIME = 7 * 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. *
  21. * @return
  22. */
  23. public static String sign(String userName, Integer id, String farmIds, Integer workId,Integer userType) {
  24. String JwtToken = Jwts.builder()
  25. //头部信息
  26. .setHeaderParam("typ", "JWT")
  27. .setHeaderParam("alg", "HS256")
  28. .setSubject("hm-user")
  29. .setIssuedAt(new Date())
  30. //过期时间
  31. .setExpiration(new Date(System.currentTimeMillis() + EXPIRE_TIME))
  32. //token主体部分,存储用户信息
  33. .claim("userName", userName)
  34. .claim("id", id)
  35. .claim("type", userType)
  36. .claim("farmIds", farmIds)
  37. .claim("workId", workId)
  38. .signWith(SignatureAlgorithm.HS256, APP_SECRET)
  39. .compact();
  40. return JwtToken;
  41. }
  42. /**
  43. * token校验是否正确
  44. *
  45. * @param token
  46. * @return
  47. */
  48. public static boolean verify(String token) {
  49. if (StringUtils.isBlank(token)) {
  50. return false;
  51. }
  52. try {
  53. Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(token);
  54. } catch (Exception e) {
  55. e.printStackTrace();
  56. return false;
  57. }
  58. return true;
  59. }
  60. /**
  61. * 根据token获取会员id
  62. *
  63. * @param request
  64. * @return
  65. */
  66. public static Integer getMemberIdByJwtToken(HttpServletRequest request) {
  67. String jwtToken = request.getHeader("accessToken");
  68. if (StringUtils.isBlank(jwtToken)) {
  69. return null;
  70. }
  71. Claims claims = getClaims(jwtToken);
  72. if (ObjectUtil.isEmpty(claims) || ObjectUtil.isEmpty(claims.get("id"))) {
  73. }
  74. return (Integer) claims.get("id");
  75. }
  76. /*根据token获取工作地点*/
  77. public static String getWorkIdByJwtToken(HttpServletRequest request) {
  78. String jwtToken = request.getHeader("accessToken");
  79. if (StringUtils.isBlank(jwtToken)) {
  80. return null;
  81. }
  82. Claims claims = getClaims(jwtToken);
  83. if(ObjectUtil.isEmpty(claims)||ObjectUtil.isEmpty(claims.get("workId"))){
  84. }
  85. return (String) claims.get("workId");
  86. }
  87. /**
  88. * 根据token获取用户类型
  89. *
  90. * @param request
  91. * @return
  92. */
  93. public static Integer getUserTypeByJwtToken(HttpServletRequest request) {
  94. String jwtToken = request.getHeader("accessToken");
  95. if (StringUtils.isBlank(jwtToken)) {
  96. return null;
  97. }
  98. Claims claims = getClaims(jwtToken);
  99. if (ObjectUtil.isEmpty(claims) || ObjectUtil.isEmpty(claims.get("type"))) {
  100. }
  101. return (Integer) claims.get("type");
  102. }
  103. public static String getFarmIds(HttpServletRequest request) {
  104. String jwtToken = request.getHeader("accessToken");
  105. if (StringUtils.isBlank(jwtToken)) {
  106. return null;
  107. }
  108. Claims claims = getClaims(jwtToken);
  109. return (String) claims.get("farmIds");
  110. }
  111. public static String getUserNameByJwtToken(HttpServletRequest request) {
  112. String jwtToken = request.getHeader("accessToken");
  113. if (StringUtils.isBlank(jwtToken)) {
  114. return null;
  115. }
  116. Claims claims = getClaims(jwtToken);
  117. return (String) claims.get("userName");
  118. }
  119. /**
  120. * 获取claims对象
  121. *
  122. * @param jwtToken
  123. * @return
  124. */
  125. public static Claims getClaims(String jwtToken) {
  126. try {
  127. Jws<Claims> claimsJws = Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
  128. return claimsJws.getBody();
  129. } catch (Exception e) {
  130. return null;
  131. }
  132. }
  133. /**
  134. * 是否过期
  135. *
  136. * @param claims
  137. * @return -1:有效,0:有效,1:过期,2:被篡改
  138. */
  139. public static int verifyToken(Claims claims) {
  140. if (claims == null) {
  141. return 1;
  142. }
  143. try {
  144. claims.getExpiration()
  145. .before(new Date());
  146. // 需要自动刷新TOKEN
  147. if ((claims.getExpiration().getTime() - System.currentTimeMillis()) < REFRESH_TIME * 1000) {
  148. return -1;
  149. } else {
  150. return 0;
  151. }
  152. } catch (ExpiredJwtException ex) {
  153. return 1;
  154. } catch (Exception e) {
  155. return 2;
  156. }
  157. }
  158. }