JwtTokenUtil.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. //package com.macro.mall.security.util;
  2. //
  3. //import cn.hutool.core.date.DateUtil;
  4. //import cn.hutool.core.util.StrUtil;
  5. //import io.jsonwebtoken.Claims;
  6. //import io.jsonwebtoken.Jwts;
  7. //import io.jsonwebtoken.SignatureAlgorithm;
  8. //import org.slf4j.Logger;
  9. //import org.slf4j.LoggerFactory;
  10. //import org.springframework.beans.factory.annotation.Value;
  11. //import org.springframework.security.core.userdetails.UserDetails;
  12. //
  13. //import java.util.Date;
  14. //import java.util.HashMap;
  15. //import java.util.Map;
  16. //
  17. ///**
  18. // * JwtToken生成的工具类
  19. // * JWT token的格式:header.payload.signature
  20. // * header的格式(算法、token的类型):
  21. // * {"alg": "HS512","typ": "JWT"}
  22. // * payload的格式(用户名、创建时间、生成时间):
  23. // * {"sub":"wang","created":1489079981393,"exp":1489684781}
  24. // * signature的生成算法:
  25. // * HMACSHA512(base64UrlEncode(header) + "." +base64UrlEncode(payload),secret)
  26. // * Created by macro on 2018/4/26.
  27. // */
  28. //public class JwtTokenUtil {
  29. // private static final Logger LOGGER = LoggerFactory.getLogger(JwtTokenUtil.class);
  30. // private static final String CLAIM_KEY_USERNAME = "sub";
  31. // private static final String CLAIM_KEY_CREATED = "created";
  32. // @Value("${jwt.secret}")
  33. // private String secret;
  34. // @Value("${jwt.expiration}")
  35. // private Long expiration;
  36. // @Value("${jwt.tokenHead}")
  37. // private String tokenHead;
  38. //
  39. // /**
  40. // * 根据负责生成JWT的token
  41. // */
  42. // private String generateToken(Map<String, Object> claims) {
  43. // return Jwts.builder()
  44. // .setClaims(claims)
  45. // .setExpiration(generateExpirationDate())
  46. // .signWith(SignatureAlgorithm.HS512, secret)
  47. // .compact();
  48. // }
  49. //
  50. // /**
  51. // * 从token中获取JWT中的负载
  52. // */
  53. // private Claims getClaimsFromToken(String token) {
  54. // Claims claims = null;
  55. // try {
  56. // claims = Jwts.parser()
  57. // .setSigningKey(secret)
  58. // .parseClaimsJws(token)
  59. // .getBody();
  60. // } catch (Exception e) {
  61. // LOGGER.info("JWT格式验证失败:{}", token);
  62. // }
  63. // return claims;
  64. // }
  65. //
  66. // /**
  67. // * 生成token的过期时间
  68. // */
  69. // private Date generateExpirationDate() {
  70. // return new Date(System.currentTimeMillis() + expiration * 1000);
  71. // }
  72. //
  73. // /**
  74. // * 从token中获取登录用户名
  75. // */
  76. // public String getUserNameFromToken(String token) {
  77. // String username;
  78. // try {
  79. // Claims claims = getClaimsFromToken(token);
  80. // username = claims.getSubject();
  81. // } catch (Exception e) {
  82. // username = null;
  83. // }
  84. // return username;
  85. // }
  86. //
  87. // /**
  88. // * 验证token是否还有效
  89. // *
  90. // * @param token 客户端传入的token
  91. // * @param userDetails 从数据库中查询出来的用户信息
  92. // */
  93. // public boolean validateToken(String token, UserDetails userDetails) {
  94. // String username = getUserNameFromToken(token);
  95. // return username.equals(userDetails.getUsername()) && !isTokenExpired(token);
  96. // }
  97. //
  98. // /**
  99. // * 判断token是否已经失效
  100. // */
  101. // private boolean isTokenExpired(String token) {
  102. // Date expiredDate = getExpiredDateFromToken(token);
  103. // return expiredDate.before(new Date());
  104. // }
  105. //
  106. // /**
  107. // * 从token中获取过期时间
  108. // */
  109. // private Date getExpiredDateFromToken(String token) {
  110. // Claims claims = getClaimsFromToken(token);
  111. // return claims.getExpiration();
  112. // }
  113. //
  114. // /**
  115. // * 根据用户信息生成token
  116. // */
  117. // public String generateToken(UserDetails userDetails) {
  118. // Map<String, Object> claims = new HashMap<>();
  119. // claims.put(CLAIM_KEY_USERNAME, userDetails.getUsername());
  120. // claims.put(CLAIM_KEY_CREATED, new Date());
  121. // return generateToken(claims);
  122. // }
  123. //
  124. // /**
  125. // * 当原来的token没过期时是可以刷新的
  126. // *
  127. // * @param oldToken 带tokenHead的token
  128. // */
  129. // public String refreshHeadToken(String oldToken) {
  130. // if(StrUtil.isEmpty(oldToken)){
  131. // return null;
  132. // }
  133. // String token = oldToken.substring(tokenHead.length());
  134. // if(StrUtil.isEmpty(token)){
  135. // return null;
  136. // }
  137. // //token校验不通过
  138. // Claims claims = getClaimsFromToken(token);
  139. // if(claims==null){
  140. // return null;
  141. // }
  142. // //如果token已经过期,不支持刷新
  143. // if(isTokenExpired(token)){
  144. // return null;
  145. // }
  146. // //如果token在30分钟之内刚刷新过,返回原token
  147. // if(tokenRefreshJustBefore(token,30*60)){
  148. // return token;
  149. // }else{
  150. // claims.put(CLAIM_KEY_CREATED, new Date());
  151. // return generateToken(claims);
  152. // }
  153. // }
  154. //
  155. // /**
  156. // * 判断token在指定时间内是否刚刚刷新过
  157. // * @param token 原token
  158. // * @param time 指定时间(秒)
  159. // */
  160. // private boolean tokenRefreshJustBefore(String token, int time) {
  161. // Claims claims = getClaimsFromToken(token);
  162. // Date created = claims.get(CLAIM_KEY_CREATED, Date.class);
  163. // Date refreshDate = new Date();
  164. // //刷新时间在创建时间的指定时间内
  165. // if(refreshDate.after(created)&&refreshDate.before(DateUtil.offsetSecond(created,time))){
  166. // return true;
  167. // }
  168. // return false;
  169. // }
  170. //}