JWT項目測試

一 創建Maven項目

1 項目

項目類型:Maven
groupId:com.atguigu
articatld:jwt

2 依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.atguigu</groupId>
    <artifactId>jwt</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!-- JWT -->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.7.0</version>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.6</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>

3 創建Member.java

/**
* @className: Member
* @description: 會員類
* @date: 2020/12/27
* @author: cakin
*/
@Data
public class Member {
    /**
     * 會員id
     */
    private String id;
    /**
     * 會員暱稱
     */
    private String nickname;
    /**
     * 會員圖像
     */
    private String avatar;
}

二 創建工具類

1 創建JWT工具類

public class JwtUtils {
    // 過期時間,30秒
    public static final long EXPIRE = 1000 * 30;
    // APP Secret
    public static final String APP_SECRET = "123456";

    /**
     * 功能描述:生成Jwt
     *
     * @param id       用戶id
     * @param nickname 用戶暱稱
     * @param avatar   用戶圖像
     * @return String jwt
     * @author cakin
     * @date 2020/12/27
     * @description:
     */
    public static String genJwt(String id, String nickname, String avatar) {
        // 創建builder對象
        JwtBuilder builder = Jwts.builder();
        // 第一部分:JWT 頭  hdeader
        builder.setHeaderParam("alg", "HS256"); // 簽名算法
        builder.setHeaderParam("typ", "JWT"); // 令牌類型
        // 第二部分: 有效載荷  Playload
        // 默認字段
        builder.setId("1"); // jwt的唯一身份標識,主要用來作爲一次性token,從而回避重放攻擊。
        builder.setSubject("guli-user"); // 令牌的主題
        builder.setIssuedAt(new Date());
        builder.setExpiration(new Date(System.currentTimeMillis() + EXPIRE)); // 過期時間
        // 私有自定義字段
        builder.claim("id", id);
        builder.claim("nickname", nickname);
        builder.claim("avatar", avatar);
        // 第三部分:簽名哈希 VERIFY SIGNATURE
        builder.signWith(SignatureAlgorithm.HS256, APP_SECRET);
        // 將三部分連接起來
        String token = builder.compact();
        return token;
    }

    /**
     * 功能描述:驗證Jwt
     *
     * @param jwtToken jwt
     * @return
     * @author cakin
     * @date 2020/12/27
     * @description:
     */
    public static Claims checkJwt(String jwtToken) {
        JwtParser parser = Jwts.parser();
        Jws<Claims> claimsJws = parser.setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
        // Jwt的頭
//        JwsHeader header = claimsJws.getHeader();
        // Jwt有效荷載
        Claims body = claimsJws.getBody();
        // 簽名
//        String signature = claimsJws.getSignature();
        return body;
    }
}

2 測試用例

public class JwtTest {
    /**
     * 功能描述:生成Jwt
     *
     * @author cakin
     * @date 2020/12/27
     */
    @Test
    public void testGenJwt() {
        Member member = new Member();
        member.setId("100");
        member.setNickname("cakin");
        member.setAvatar("cakin.jpg");
        String token = JwtUtils.genJwt(member.getId(), member.getNickname(), member.getAvatar());
        System.out.println(token);
        Claims claims = JwtUtils.checkJwt(token);
        String id = (String) claims.get("id");
        String nickname = (String) claims.get("nickname");
        String avatar = (String) claims.get("avatar");
        System.out.println(id);
        System.out.println(nickname);
        System.out.println(avatar);
    }
}

3 測試結果

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIxIiwic3ViIjoiZ3VsaS11c2VyIiwiaWF0IjoxNjA5MDY1NzU4LCJleHAiOjE2MDkwNjU3ODgsImlkIjoiMTAwIiwibmlja25hbWUiOiJIZWxlbiIsImF2YXRhciI6ImhlbGVuLmpwZyJ9.qmZdJsrpWqIFG2ZuKvsRrh1wiXK0Rn7gX7fLVpX1zgk
100
cakin
cakin.jpg

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章