• 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
  • 相关阅读:
    G1垃圾回收器
    BeanFactory和FactoryBean的区别
    【日志采集系统】python实现-附ChatGPT解析
    美丽塔O(n)解法单调栈
    小马识途营销顾问分享百度百科词条创建的实战技巧
    蓝桥杯实战应用【算法代码篇】-多分支递归:裴波那契序列(附Java、C++和R语言代码)
    孙卫琴的《精通JPA与Hibernate》的读书笔记:通过JPA处理Blob和Clob类型的数据
    slf4j如何进行logback配置呢?
    电容器的 ESR 参数
    git密码提交切换SSH提交
  • 原文地址:https://blog.csdn.net/studycodeday/article/details/133634489