【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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!