01-JWT认证
1.JWT (json web token)
1.是一个轻量级的规范,允许我们适用jwt在用户和服务器之间传递安全可靠的信息。
2.JWT 的组成
参考博客:https://www.cnblogs.com/wangshouchang/p/9551748.html
规定了token应该头部、载荷、签证 三部分构成,每个部分都是json格式
头部(Header)
载荷(playload)
签证(signature)
3.适用步骤
1.导入依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
2.使用
生成jwtToken
@Test
public void generateJwtToken(){
long tm = System.currentTimeMillis();
String jwtToken = Jwts.builder()
.setId(UUID.randomUUID().toString()) //jwtId,唯一id
.setSubject("subject") //jwt主题
.setIssuedAt(new Date(tm)) //发布时间
.setIssuer("themelove") //发布人
.setAudience("commonUser") //接受者
.claim("username", "themelove") //自定义属性
.claim("role", "admin")
.setExpiration(new Date(tm + (1000 * 300))) //
.setNotBefore(new Date(tm)) //该jwt不早于某个时间之前使用
.signWith(SignatureAlgorithm.HS256, "jwtsecretkey") //签名算法,和加密key,加密key很重要
.compact();
System.out.println("jwtToken=>"+jwtToken);
}
解析jwtToken
@Test
public void parseJwtToken(){
String jwtToken = "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI4MWU4NjkzOS1lNGVjLTRhZWUtOWQ4ZS1lYzk5MTAzMGIyMDAiLCJzdWIiOiJzdWJqZWN0IiwiaWF0IjoxNTg0NTM3NDAzLCJpc3MiOiJ0aGVtZWxvdmUiLCJhdWQiOiJjb21tb25Vc2VyIiwidXNlcm5hbWUiOiJ0aGVtZWxvdmUiLCJyb2xlIjoiYWRtaW4iLCJleHAiOjE1ODQ1Mzc3MDMsIm5iZiI6MTU4NDUzNzQwM30.9NxIKKM0C2VowSUniv-tYmIhUt-UHlrh9yadN46UuvY";
Jws<Claims> jwtClaims = Jwts.parser()
.setSigningKey("jwtsecretkey")
.parseClaimsJws(jwtToken);
String signature = jwtClaims.getSignature();
Claims body = jwtClaims.getBody();
JwsHeader header = jwtClaims.getHeader();
System.out.println("signature="+signature);
System.out.println("body="+body);
System.out.println("header="+header);
}
#输出结果如下:
signature=9NxIKKM0C2VowSUniv-tYmIhUt-UHlrh9yadN46UuvY
body={jti=81e86939-e4ec-4aee-9d8e-ec991030b200, sub=subject, iat=1584537403, iss=themelove, aud=commonUser, username=themelove, role=admin, exp=1584537703, nbf=1584537403}
header={alg=HS256}
Last updated
Was this helpful?