使用JWT生成token,2024年最新高级大数据开发开发技术

本文介绍了如何在大数据开发中使用JWT(JSON Web Token)进行用户认证和信息交换。内容包括JWT的基本原理、优缺点、使用场景以及如何在Java项目中整合JWT,包括生成和验证JWT token的代码示例。作者分享了完整的JWT工具类实现,以及提醒读者JWT的安全注意事项,如使用HTTPS传输以防止数据被窃取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文

{

“sub”: “1234567890”,

“name”: “atguigu”,

“admin”: true

}

之后,当用户与服务器通信时,客户在请求中发回JSON对象。服务器仅依赖于这个JSON对象来标识用户。为了防止用户篡改数据,服务器将在生成对象时添加签名。

服务器不保存任何会话数据,即服务器变为无状态,使其更容易扩展。

4、JWT的用法

客户端接收服务器返回的JWT,将其存储在Cookie或localStorage中。

此后,客户端将在与服务器交互中都会带JWT。如果将它存储在Cookie中,就可以自动发送,但是不会跨域,因此一般是将它放入HTTP请求的Header Authorization字段中。当跨域时,也可以将JWT被放置于POST请求的数据主体中。

5、JWT问题和趋势

  • JWT不仅可用于认证,还可用于信息交换。善用JWT有助于减少服务器请求数据库的次数。
  • 生产的token可以包含基本信息,比如id、用户昵称、头像等信息,避免再次查库
  • 存储在客户端,不占用服务端的内存资源
  • JWT默认不加密,但可以加密。生成原始令牌后,可以再次对其进行加密。
  • 当JWT未加密时,一些私密数据无法通过JWT传输。
  • JWT的最大缺点是服务器不保存会话状态,所以在使用期间不可能取消令牌或更改令牌的权限。也就是说,一旦JWT签发,在有效期内将会一直有效。
  • JWT本身包含认证信息,token是经过base64编码,所以可以解码,因此token加密前的对象不应该包含敏感信息,一旦信息泄露,任何人都可以获得令牌的所有权限。为了减少盗用,JWT的有效期不宜设置太长。对于某些重要操作,用户在使用时应该每次都进行身份验证。
  • 为了减少盗用和窃取,JWT不建议使用HTTP协议来传输代码,而是使用加密的HTTPS协议进行传输。

三、整合JWT令牌

1、加入jwt工具依赖

创建的mavne项目中的pom中添加

io.jsonwebtoken

jjwt

0.7.0

2、创建JWT工具类

项目中的util包中添加

package com.atguigu.util;

import com.atguigu.entity.Member;

import io.jsonwebtoken.Claims;

import io.jsonwebtoken.Jwts;

import io.jsonwebtoken.SignatureAlgorithm;

import org.springframework.util.StringUtils;

import java.util.Date;

/**

* jwt工具类

*/

public class JwtUtils {

public static final String SUBJECT = “guli”;

//秘钥

public static final String APPSECRET = “guli”;

public static final long EXPIRE = 1000 * 60 * 30; //过期时间,毫秒,30分钟

/**

* 生成jwt token

*

* @param member

* @return

*/

public static String geneJsonWebToken(Member member) {

if (member == null || StringUtils.isEmpty(member.getId())

|| StringUtils.isEmpty(member.getNickname())

|| StringUtils.isEmpty(member.getAvatar())) {

return null;

}

String token = Jwts.builder().setSubject(SUBJECT)

.claim(“id”, member.getId())

.claim(“nickname”, member.getNickname())

.claim(“avatar”, member.getAvatar())

.setIssuedAt(new Date())

.setExpiration(new Date(System.currentTimeMillis() + EXPIRE))

.signWith(SignatureAlgorithm.HS256, APPSECRET).compact();

return token;

}

/**

* 校验jwt token

*

* @param token

* @return

*/

public static Claims checkJWT(String token) {

Claims claims = Jwts.parser().setSigningKey(APPSECRET).parseClaimsJws(token).getBody();

return claims;

}

//测试生成jwt token

private static String testGeneJwt(){

Member member = new Member();

member.setId(“999”);

member.setAvatar(“www.guli.com”);

member.setNickname(“Helen”);

String token = JwtUtils.geneJsonWebToken(member);

System.out.println(token);

return token;

}

//测试校验jwt token

private static void testCheck(String token){

Claims claims = JwtUtils.checkJWT(token);

String nickname = (String)claims.get(“nickname”);

String avatar = (String)claims.get(“avatar”);

String id = (String)claims.get(“id”);

System.out.println(nickname);

System.out.println(avatar);

System.out.println(id);

}

public static void main(String[] args){

String token = testGeneJwt();

testCheck(token);

}

}

3、测试生成token

在测试类中添加如下代码

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

}

}

3、测试生成token

在测试类中添加如下代码

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
[外链图片转存中…(img-A5KIn1la-1713375593903)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值