TokenSign.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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. * 过期时间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. * @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. /**
  73. * 根据token获取用户类型
  74. *
  75. * @param request
  76. * @return
  77. */
  78. public static Integer getUserTypeByJwtToken(HttpServletRequest request) {
  79. String jwtToken = request.getHeader("accessToken");
  80. if (StringUtils.isBlank(jwtToken)) {
  81. return null;
  82. }
  83. Claims claims = getClaims(jwtToken);
  84. if(ObjectUtil.isEmpty(claims)||ObjectUtil.isEmpty(claims.get("type"))){
  85. }
  86. return (Integer) claims.get("type");
  87. }
  88. public static String getFarmIds(HttpServletRequest request) {
  89. String jwtToken = request.getHeader("accessToken");
  90. if (StringUtils.isBlank(jwtToken)) {
  91. return null;
  92. }
  93. Claims claims = getClaims(jwtToken);
  94. return (String) claims.get("farmIds");
  95. }
  96. public static String getUserNameByJwtToken(HttpServletRequest request) {
  97. String jwtToken = request.getHeader("accessToken");
  98. if (StringUtils.isBlank(jwtToken)) {
  99. return null;
  100. }
  101. Claims claims = getClaims(jwtToken);
  102. return (String) claims.get("userName");
  103. }
  104. /**
  105. * 获取claims对象
  106. *
  107. * @param jwtToken
  108. * @return
  109. */
  110. public static Claims getClaims(String jwtToken) {
  111. try {
  112. Jws<Claims> claimsJws = Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
  113. return claimsJws.getBody();
  114. }catch (Exception e){
  115. return null;
  116. }
  117. }
  118. /**
  119. * 是否过期
  120. *
  121. * @param claims
  122. * @return -1:有效,0:有效,1:过期,2:被篡改
  123. */
  124. public static int verifyToken(Claims claims) {
  125. if (claims == null) {
  126. return 1;
  127. }
  128. try {
  129. claims.getExpiration()
  130. .before(new Date());
  131. // 需要自动刷新TOKEN
  132. if ((claims.getExpiration().getTime() - System.currentTimeMillis()) < REFRESH_TIME * 1000) {
  133. return -1;
  134. } else {
  135. return 0;
  136. }
  137. } catch (ExpiredJwtException ex) {
  138. return 1;
  139. } catch (Exception e) {
  140. return 2;
  141. }
  142. }
  143. }