【JwtUtil】JwtUtil工具类与测试情况

【JwtUtil】JwtUtil工具类与测试情况

(1) jwt整合

	<!-- jwt整合 -->
	<dependency>
	    <groupId>io.jsonwebtoken</groupId>
	    <artifactId>jjwt</artifactId>
	    <version>0.9.1</version>
	</dependency>

(2) JwtUtil工具类代码

/**
 * @author 東方神劍
 * 時間 2023/05/30下午 07:13
 */
@Component
public class JwtUtil {

    // 有效期
    private static final long JWT_EXPIRE = 30*60*1000L;  //半小时
    // 令牌MIYAO
    private static final String JWT_KEY = "123456";

    public  String createToken(Object data){
        // 当前时间
        long currentTime = System.currentTimeMillis();
        // 过期时间
        long expTime = currentTime+JWT_EXPIRE;
        // 构建jwt
        JwtBuilder builder = Jwts.builder()
                .setId(UUID.randomUUID()+"")
                .setSubject(JSON.toJSONString(data))
                .setIssuer("system")
                .setIssuedAt(new Date(currentTime))
                .signWith(SignatureAlgorithm.HS256, encodeSecret(JWT_KEY))
                .setExpiration(new Date(expTime));
        return builder.compact();
    }

    private SecretKey encodeSecret(String key){
        byte[] encode = Base64.getEncoder().encode(key.getBytes());
        SecretKeySpec aes = new SecretKeySpec(encode, 0, encode.length, "AES");
        return  aes;
    }

    public Claims parseToken(String token){
        Claims body = Jwts.parser()
                .setSigningKey(encodeSecret(JWT_KEY))
                .parseClaimsJws(token)
                .getBody();
        return body;
    }

    public <T> T parseToken(String token,Class<T> clazz){
        Claims body = Jwts.parser()
                .setSigningKey(encodeSecret(JWT_KEY))
                .parseClaimsJws(token)
                .getBody();
        return JSON.parseObject(body.getSubject(),clazz);
    }
}

(3) JwtUtil测试类代码

/**
 * @author 東方神劍
 * 時間 2023/05/30下午 08:54
 */
@SpringBootTest
public class JwtUtilTest {

    @Autowired
    private JwtUtil jwtUtil;

    @Test
    public void testCreateJwt(){
        User user = new User();
        user.setUsername("张三");
        user.setPhone("1234567890");
        String token = jwtUtil.createToken(user);
        System.out.println(token);
    }

    @Test
    public void testParseJwt(){
        String token = "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxNjJlNWNiYS1lNTZkLTRiMTItYThiNC03ZGNlMzZjNDZmMjYiLCJzdWIiOiJ7XCJwaG9uZVwiOlwiMTIzNDU2Nzg5MFwiLFwidXNlcm5hbWVcIjpcIuW8oOS4iVwifSIsImlzcyI6InN5c3RlbSIsImlhdCI6MTY4NTQ1NTE0NywiZXhwIjoxNjg1NDU2OTQ3fQ.VYt4b89O1iFwwXUqwgZ-Uh7s162pmvPAu9t6jCywQi4";
        Claims claims = jwtUtil.parseToken(token);
        System.out.println(claims);
    }

    @Test
    public void testParseJwt2(){
        String token = "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxNjJlNWNiYS1lNTZkLTRiMTItYThiNC03ZGNlMzZjNDZmMjYiLCJzdWIiOiJ7XCJwaG9uZVwiOlwiMTIzNDU2Nzg5MFwiLFwidXNlcm5hbWVcIjpcIuW8oOS4iVwifSIsImlzcyI6InN5c3RlbSIsImlhdCI6MTY4NTQ1NTE0NywiZXhwIjoxNjg1NDU2OTQ3fQ.VYt4b89O1iFwwXUqwgZ-Uh7s162pmvPAu9t6jCywQi4";
        User user = jwtUtil.parseToken(token,User.class);
        System.out.println(user);
    }
}

(4)一点儿补充(优秀代码设计片段标记与摘录):
在JwtUtil工具类里这个方法是很不错的:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方神剑2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值