微服务项目:尚融宝(24)(后端搭建:JWT令牌测试)

本文介绍了如何创建一个基于Maven的Java项目,并使用JWT(JSON Web Token)进行用户身份验证。首先,展示了如何配置Maven依赖,包括JWT库和JUnit。接着,详细演示了生成和解析JWT token的过程,包括设置过期时间、签发者、接收者等信息,并通过JUnit测试验证其功能。
摘要由CSDN通过智能技术生成

认清现实,放弃幻想,准备斗争

一、创建Maven项目

1、项目

项目类型:Maven

groupId:com.atguigu

artifactId:jwt

2、基本依赖

<dependencies>
    <!-- JWT -->
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.7.0</version>
    </dependency>

    <!--junit-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

</dependencies>

二、测试JWT

1、生成token

public class JwtTests {

    //过期时间,毫秒,24小时
    private static long tokenExpiration = 24*60*60*1000;
    //秘钥
    private static String tokenSignKey = "atguigu123";

    @Test
    public void testCreateToken(){
        String token = Jwts.builder()
                .setHeaderParam("typ", "JWT") //令牌类型
                .setHeaderParam("alg", "HS256") //签名算法

                .setSubject("guli-user") //令牌主题
                .setIssuer("atguigu")//签发者
                .setAudience("atguigu")//接收者
                .setIssuedAt(new Date())//签发时间
                .setExpiration(new Date(System.currentTimeMillis() + tokenExpiration)) //过期时间
                .setNotBefore(new Date(System.currentTimeMillis() + 20*1000)) //20秒后可用
                .setId(UUID.randomUUID().toString())

                .claim("nickname", "Helen")
                .claim("avatar", "1.jpg")

                .signWith(SignatureAlgorithm.HS256, tokenSignKey)//签名哈希
                .compact(); //转换成字符串

        System.out.println(token);
    }
}

 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJndWxpLXVzZXIiLCJpc3MiOiJhdGd1aWd1IiwiYXVkIjoiYXRndWlndSIsImlhdCI6MTY2MjYzNTc0NiwiZXhwIjoxNjYyNzIyMTQ2LCJuYmYiOjE2NjI2MzU3NjYsImp0aSI6ImQ0OGE2MTY3LWNiNzMtNGQyMi1hMjg2LTJjNDU2YWYyOTY5MiIsIm5pY2tuYW1lIjoiSGVsZW4iLCJhdmF0YXIiOiIxLmpwZyJ9.KR9MIgf0Hykpa78GyxcEAcZHe8R_onDGpr7c3Ns3Mg8

 2、解析token

  @Test
    public void testGetUserInfo(){
        String token = Jwts.builder()
                .setHeaderParam("typ", "JWT") //令牌类型
                .setHeaderParam("alg", "HS256") //签名算法

                .setSubject("guli-user") //令牌主题
                .setIssuer("atguigu")//签发者
                .setAudience("atguigu")//接收者
                .setIssuedAt(new Date())//签发时间
                .setExpiration(new Date(System.currentTimeMillis() + tokenExpiration)) //过期时间
                .setNotBefore(new Date(System.currentTimeMillis())) //20秒后可用
                .setId(UUID.randomUUID().toString())

                .claim("nickname", "Helen")
                .claim("avatar", "1.jpg")

                .signWith(SignatureAlgorithm.HS256, tockenSigKey)//签名哈希
                .compact(); //转换成字符串

        System.out.println(token);
        JwtParser parser = Jwts.parser();
        Jws<Claims> claimsJws = parser.setSigningKey(tockenSigKey).parseClaimsJws(token);
        Claims body = claimsJws.getBody();
        String subject = body.getSubject();
        Date issuedAt = body.getIssuedAt();
        Date notBefore = body.getNotBefore();
        String signature = claimsJws.getSignature();
        System.out.println(subject);
        System.out.println(notBefore);
        System.out.println(issuedAt);
        System.out.println(signature);
    }

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJndWxpLXVzZXIiLCJpc3MiOiJhdGd1aWd1IiwiYXVkIjoiYXRndWlndSIsImlhdCI6MTY2MjYzNTg4NywiZXhwIjoxNjYyNzIyMjg3LCJuYmYiOjE2NjI2MzU4ODcsImp0aSI6IjA0ZTBiZDk3LTFkOWItNGY5MS04M2RkLWEyMGI1OWI4Yjk1NiIsIm5pY2tuYW1lIjoiSGVsZW4iLCJhdmF0YXIiOiIxLmpwZyJ9.LPFZG5d5Y2YQuFjEKJQdrjrl_i9m5YsXECyK2qd232w
guli-user
Thu Sep 08 19:18:07 CST 2022
Thu Sep 08 19:18:07 CST 2022
LPFZG5d5Y2YQuFjEKJQdrjrl_i9m5YsXECyK2qd232w 

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一个风轻云淡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值