【java】token令牌

2023-12-15 10:33:04

什么是令牌

一段字符串,用来身份识别的

要求:

1. 承载业务数据,减少后续请求查询数据库的次数

2.放篡改,保证信息的合法性和有效性

JWT

全称:JSON?Web?Token?(https://jwt.io/)
定义了一种简洁的、自包含的格式,用于通信双方以json数据格式安全的传输信息。

组成:
第一部分:Header(头),记录令牌类型、签名算法等。?例如:{"alg":"HS256","type":"JWT"}
第二部分:Payload(有效载荷),携带一些自定义信息、默认信息等。例如:{"id":"1","username":"Tom"}

第三部分:Signature(签名),防止Token被篡改、确保安全性。将header、payload,并加入指定秘钥,通过指定签名算法计算而来。
?

实现

java——springboot

package com.example.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;

import java.util.Date;
import java.util.Map;

public class JwtUtil {

    private static final String KEY = "hzy";
	
	//接收业务数据,生成token并返回
    public static String genToken(Map<String, Object> claims) {
        return JWT.create()
                .withClaim("claims", claims)
                .withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12))
                .sign(Algorithm.HMAC256(KEY));
    }

	//接收token,验证token,并返回业务数据
    public static Map<String, Object> parseToken(String token) {
        return JWT.require(Algorithm.HMAC256(KEY))
                .build()
                .verify(token)
                .getClaim("claims")
                .asMap();
    }

}
package com.example;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.junit.jupiter.api.Test;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author huangzhiyang
 * @Date 2023/12/1
 * @Description
 */
public class JwtTest {
    @Test
    public void testGen() {
        Map<String, Object> claims = new HashMap<>();
        claims.put("id", 1);
        claims.put("username", "zhangsan");
        String token = JWT.create().withClaim("user", claims)//添加载荷
                .withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60))//增加过期时间
                .sign(Algorithm.HMAC256("hzy"));//生成密钥

        System.out.println(token);
    }

    @Test
    public void testParse() {
        String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1" +
                "NiJ9.eyJleHAiOjE3MDE0MzQ1MjEsInVzZXIiOnsiaWQiOjEs" +
                "InVzZXJuYW1lIjoiemhhbmdzYW4ifX0.fnbkMTTOXWHQ9O-tcmw8gfd8DziqE_1S1rAIC-Fqhcc";


        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("hzy")).build();
        DecodedJWT verify = jwtVerifier.verify(token);
        Map<String, Claim> claims = verify.getClaims();
        System.out.println(claims.get("user"));

    }
}

文章来源:https://blog.csdn.net/David_Hzy/article/details/134742437
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。