JWT介绍

JWT介绍

JWT工具
JWT(Json Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准

JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上

JWT最重要的作用就是对 token信息的防伪作用

JWT的原理,
一个JWT由三个部分组成:公共部分私有部分签名部分。最后由这三者组合进行base64编码得到JWT
在这里插入图片描述

介绍

1、公共部分
主要是该JWT的相关配置参数,比如签名的加密算法、格式类型、过期时间等等。
Key=ATGUIGU
2、私有部分
用户自定义的内容,根据实际需要真正要封装的信息
userInfo{用户的Id,用户的昵称nickName}
3、签名部分
SaltiP: 当前服务器的Ip地址!{linux 中配置代理服务器的ip}
主要用户对JWT生成字符串的时候,进行加密{盐值}
最终组成 key+salt+userInfo token!
base64编码,并不是加密,只是把明文信息变成了不可见的字符串。但是其实只要用一些工具就可以把base64编码解成明文所以不要在JWT中放入涉及私密的信息

集成JWT

1、pom.xml添加依赖

        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
        </dependency>

2、编写JwtHelper类

/**
 * jwt工具类
 * <p>
 * 创建时间: 2022-03-20 17:14
 *
 * @author fuxshen
 * @version v1.0.0
 * @since v1.0.0
 */
public class JwtHelper {
	//token的过期时间
	private static long tokenExpiration = 24 * 60 * 60 * 1000;
	//token签名秘钥
	private static String tokenSignKey = "123456";

	/**
	 * 根据参数生成token
	 *
	 * @param userId
	 * @param userName
	 * @return java.lang.String
	 * @Description
	 * @author fuxshen
	 * @date 2022-03-20 17:17:15
	 **/
	public static String createToken(Long userId, String userName) {
		String token = Jwts.builder()
				.setSubject("YYGH-USER")
				//设置过期时间(当前系统时间+设置的时间) 当前系统时间,往后延迟我们设置的时间
				.setExpiration(new Date(System.currentTimeMillis() + tokenExpiration))
				//加密的主体信息
				.claim("userId", userId)
				.claim("userName", userName)
				//签名hash
				.signWith(SignatureAlgorithm.HS512, tokenSignKey)
				.compressWith(CompressionCodecs.GZIP).compact();
		return token;
	}


	/**
	 * 根据token字符串,得到用户id
	 *
	 * @param token
	 * @return java.lang.Long
	 * @Description
	 * @author fuxshen
	 * @date 2022-03-20 17:18:15
	 **/
	public static Long getUserId(String token) {
		if (StringUtils.isEmpty(token)) return null;
		Jws<Claims> claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
		Claims claims = claimsJws.getBody();
		Integer userId = (Integer) claims.get("userId");
		return userId.longValue();
	}


	/**
	 * 根据token字符串,得到用户名称
	 *
	 * @param token
	 * @return java.lang.String
	 * @Description
	 * @author fuxshen
	 * @date 2022-03-20 17:19:01
	 **/
	public static String getUserName(String token) {
		if (StringUtils.isEmpty(token)) return "";
		Jws<Claims> claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
		Claims claims = claimsJws.getBody();
		return (String) claims.get("userName");
	}

	public static void main(String[] args) {
		String token = JwtHelper.createToken(1L, "55");
		System.out.println(token);
		System.out.println(JwtHelper.getUserId(token));
		System.out.println(JwtHelper.getUserName(token));
	}
}

在需要使用jwt,调用JwtHelper中的createToken方法,传递参数生成token

String token = JwtHelper.createToken(userInfo.getId(), name);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
JWT(JSON Web Token)是一种用于在网络应用程序之间安全传输信息的开放标准。它以 JSON 为基础并使用数字签名或消息认证码(MAC)来验证信息的完整性和真实性。 JWT 由三个部分组成:头部、载荷和签名。 头部包含 JWT 使用的签名算法信息,例如 HMAC SHA256 或 RSA。载荷包含需要传输的信息,例如用户 ID 或权限信息。签名是将头部、载荷和秘钥组合后生成的哈希值,用于验证信息的真实性。 JWT 的工作原理如下: 1. 用户使用用户名和密码进行身份验证。 2. 服务器验证用户名和密码的正确性。 3. 如果验证成功,服务器生成 JWT 并将其发送回客户端。 4. 客户端将 JWT 存储在本地并在每个后续请求中将其包含在请求头部中。 5. 服务器在接收到请求时,验证 JWT 的签名并检查载荷中的信息是否与所需的一致。如果验证成功,服务器会处理请求。 JWT 的优点是: 1. 轻量级和简单:JWT 以 JSON 格式编码,易于理解和实现。 2. 安全性:使用数字签名或消息认证码(MAC)验证信息的完整性和真实性,确保信息不被篡改或伪造。 3. 可扩展性:JWT 载荷可以包含任意数量的属性和元数据,使其非常适合用于身份验证和授权。 4. 无状态:JWT 包含所有必要的信息,因此服务器不需要存储任何会话信息,使其易于扩展和实现负载均衡。 然而,JWT 也存在一些缺点,例如: 1. JWT 一旦生成就无法撤销,因此必须确保密钥的安全性。 2. JWT 中包含的信息对于攻击者来说是可见的,因此敏感信息不应该存储在 JWT 中。 3. JWT 无法在传输过程中进行更新,因此在过期之前必须生成新的 JWT。 总体来说,JWT 是一种非常有用的身份验证和授权解决方案,但在使用时需要仔细考虑其安全性和缺点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

shenlbang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值