• spring boot整合jwt


    jwt

    环境准备

    JWT依赖

    
    <dependency>
        <groupId>io.jsonwebtokengroupId>
        <artifactId>jjwtartifactId>
        <version>0.9.1version>
    dependency>
    
    
    <dependency>
        <groupId>com.auth0groupId>
        <artifactId>java-jwtartifactId>
        <version>3.10.3version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    生成token工具类

    import io.jsonwebtoken.*;
    import org.springframework.util.StringUtils;
    
    import java.util.Date;
    
    public class JwtHelper {
    
        // token 失效时间  当前设置过期时间 24小时
        private static long tokenExpiration = 24*60*60*1000;
    
        //生成token 的私有盐 这个按道理来说只有自己知道 加密的时候加入盐 token就不会轻易的被破解
        private static String tokenSignKey = "123456";
    
        /**
         * 生成jwt令牌【token】 也可以根据别的用户信息生成token 这里选择了 userId userName
         * @param userId  用户id
         * @param userName  用户名
         * @return
         */
        public static String createToken(Long userId,String userName){
              String token =  Jwts.builder()
    
                      //公共部分
                      .setSubject("YYGH-USER")
                      //设置token 的过期时间
                      .setExpiration(new Date(System.currentTimeMillis()+tokenExpiration))
    
                      //私有部分 
                      .claim("userId",userId)
                      .claim("userName",userName)
    
                      //签名部分 设置加密算法 + 自己的盐
                      .signWith(SignatureAlgorithm.HS512,tokenSignKey)
    
                      //对token的压缩方法 载荷过长可以进行压缩
                      .compressWith(CompressionCodecs.GZIP)
                      .compact();
    
              return token;
        }
    
        /**
         * 根据token 得到用户ID
         * @param token
         * @return
         */
        public static Long getUserIdByToken(String token){
    
            //判断token是否 null
            if(StringUtils.isEmpty(token)) return null;
    
            /**
             * 根据自定义的盐值解析token 获取token里面私有部分的信息
             *
             * tokenSignKey 自己设置的盐
             * token  传过来的token
             */
            Jws<Claims> claimsJwts =  Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
    
            //私有部分的数据体
            Claims jwtsBody = claimsJwts.getBody();
            Long userId = (Long) jwtsBody.get("userId");
            return userId;
        }
    
        /**
         * 根据token 获取用户名称
         * @param token
         * @return
         */
        public static String getUserNameByToken(String token){
            if(StringUtils.isEmpty(token)) return "";
            Jws<Claims> claimsJws
                    = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
            Claims claims = claimsJws.getBody();
            return (String)claims.get("userName");
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
  • 相关阅读:
    详解ConCurrentHashMap源码(jdk1.8)
    【wpf】数据模板 + ContextMenu 导致的 绑定失效
    Solidity - 算术运算的截断模式(unchecked)与检查模式(checked)- 0.8.0新特性
    回溯 -- 21天学习挑战赛第一天
    卫生事业管理学重点 题库含答案(终极完全版)
    如何做到,小程序上线1个月总用户量提高70%
    C++【STL】【vector类的使用】【to be continue】
    Matlab loglog函数
    Docker TimeScaleDB
    (CVPR-2019)选择性的内核网络
  • 原文地址:https://blog.csdn.net/studycodeday/article/details/133634489