1. package com.atguigu.commonutils;
    2. import io.jsonwebtoken.Claims;
    3. import io.jsonwebtoken.Jws;
    4. import io.jsonwebtoken.Jwts;
    5. import io.jsonwebtoken.SignatureAlgorithm;
    6. import org.springframework.http.server.reactive.ServerHttpRequest;
    7. import org.springframework.util.StringUtils;
    8. import javax.servlet.http.HttpServletRequest;
    9. import java.util.Date;
    10. /**
    11. * @author helen
    12. * @since 2019/10/16
    13. */
    14. public class JwtUtils {
    15. //指定过期时间
    16. public static final long EXPIRE = 1000 * 60 * 60 * 24;
    17. //指定签名
    18. public static final String APP_SECRET = "ukc8BDbRigUDaY6pZFfWus2jZWLPHO";
    19. //获取token
    20. public static String getJwtToken(String id, String nickname){
    21. String JwtToken = Jwts.builder()
    22. .setHeaderParam("typ", "JWT")
    23. .setHeaderParam("alg", "HS256")
    24. .setSubject("guli-user")
    25. .setIssuedAt(new Date())
    26. .setExpiration(new Date(System.currentTimeMillis() + EXPIRE))
    27. .claim("id", id)
    28. .claim("nickname", nickname)
    29. .signWith(SignatureAlgorithm.HS256, APP_SECRET)
    30. .compact();
    31. return JwtToken;
    32. }
    33. /**
    34. * 判断token是否存在与有效
    35. * @param jwtToken
    36. * @return
    37. */
    38. public static boolean checkToken(String jwtToken) {
    39. if(StringUtils.isEmpty(jwtToken)) return false;
    40. try {
    41. Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
    42. } catch (Exception e) {
    43. e.printStackTrace();
    44. return false;
    45. }
    46. return true;
    47. }
    48. /**
    49. * 判断token是否存在与有效
    50. * @param request
    51. * @return
    52. */
    53. public static boolean checkToken(HttpServletRequest request) {
    54. try {
    55. String jwtToken = request.getHeader("token");
    56. if(StringUtils.isEmpty(jwtToken)) return false;
    57. Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
    58. } catch (Exception e) {
    59. e.printStackTrace();
    60. return false;
    61. }
    62. return true;
    63. }
    64. /**
    65. * 根据token获取会员id
    66. * @param request
    67. * @return
    68. */
    69. public static String getMemberIdByJwtToken(HttpServletRequest request) {
    70. String jwtToken = request.getHeader("token");
    71. if(StringUtils.isEmpty(jwtToken)) return "";
    72. Jws<Claims> claimsJws = Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
    73. Claims claims = claimsJws.getBody();
    74. return (String)claims.get("id");
    75. }
    76. }