JWT 生成Token、解析Token的简单工具类

 

pom.xml导入依赖:

<dependency>
      <groupId>io.jsonwebtoken</groupId>
      <artifactId>jjwt</artifactId>
      <version>0.9.1</version>
</dependency>

JwtTokenManager工具类

import com.atguigu.security.entity.User;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.CompressionCodecs;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
​
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
​
/**
 * @author : 其然乐衣Letitbe
 * @date : 2022/11/12
 */
public class JwtTokenManager {
​
    /**
     * 用于签名的私钥
     */
    private final String PRIVATE_KEY = "516Letitbe";
​
    /**
     * 签发者
     */
    private final String ISSUER = "Letitbe";
​
    /**
     * 过期时间 1 小时
     */
    private final long EXPIRATION_ONE_HOUR = 3600L;
​
    /**
     * 过期时间 1 天
     */
    private final long EXPIRATION_ONE_DAY = 3600 * 24;
​
    /**
     * 生成Token
     * @param user         token存储的 实体类 信息
     * @param expireTime   token的过期时间
     * @return
     */
    public String createToken(User user, long expireTime) {
        // 过期时间
        if ( expireTime == 0 ) {
            // 如果是0,就设置默认 1天 的过期时间
            expireTime = EXPIRATION_ONE_DAY;
        }
​
        Map<String, Object> claims = new HashMap<>();
        // 自定义有效载荷部分, 将User实体类用户名和密码存储
        claims.put("id", user.getId());
        claims.put("username", user.getUsername());
        claims.put("password", user.getPassword());
​
        String token = Jwts.builder()
                // 发证人
                .setIssuer(ISSUER)
                // 有效载荷
                .setClaims(claims)
                // 设定签发时间
                .setIssuedAt(new Date())
                // 设置有效时长
                .setExpiration(new Date(System.currentTimeMillis() + expireTime))
                // 使用HS512算法签名,PRIVATE_KEY为签名密钥
                .signWith(SignatureAlgorithm.HS512, PRIVATE_KEY)
                // compressWith() 压缩方法,当载荷过长时可对其进行压缩
                // 可采用jjwt实现的两种压缩方法CompressionCodecs.GZIP和CompressionCodecs.DEFLATE
                .compressWith(CompressionCodecs.GZIP)
                // 生成JWT
                .compact();
        return token;
    }
​
    /**
     * 获取token中的User实体类
     * @param token
     * @return
     */
    public User getUserFromToken(String token) {
        // 获取有效载荷
        Claims claims = getClaimsFromToken(token);
        // 解析token后,从有效载荷取出值
        String id = (String) claims.get("id");
        String username = (String) claims.get("username");
        String password = (String) claims.get("password");
        // 封装成User实体类
        User user = new User();
        user.setId( id );
        user.setUsername( username );
        user.setPassword( password );
        return user;
    }
​
    /**
     * 获取有效载荷
     * @param token
     * @return
     */
    public Claims getClaimsFromToken(String token){
        Claims claims = null;
        try {
            claims = Jwts.parser()
                    //设定解密私钥
                    .setSigningKey(PRIVATE_KEY)
                    //传入Token
                    .parseClaimsJws(token)
                    //获取载荷类
                    .getBody();
        }catch (Exception e){
            return null;
        }
        return claims;
    }
}

测试:

    @Test
    public void czyTokenTest() {
        User user = new User();
        user.setId("1arg232t3tg231235");
        user.setUsername("其然乐衣");
        user.setPassword("2000516");

        String token = jwtTokenManager.createToken(user, 0L);
        System.out.println("生成的token: ");
        System.out.println(token);
        User userFromToken = jwtTokenManager.getUserFromToken(token);
        System.out.println("userFromToken:");
        System.out.println(userFromToken);
    }

 ​​​​​​

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值