admin管理员组文章数量:1794759
jwt 加密和解密demo
jwt 加密和解密demo
JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息。 导入jar <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.10.5</version> </dependency>
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.10.5</version> <scope>runtime</scope> </dependency>
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.10.5</version> <scope>runtime</scope> </dependency>
JWTTest.java
代码语言:javascript代码运行次数:0运行复制package com.example.demo.jwt;
import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys;
import java.security.Key;
import java.util.Date;
import java.util.UUID;
/**
* JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息。
* /
* .html
*/
public class JWTTest {
public static void main(String[] args) {
Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
System.out.println("=============创建 JWT===========");
Date now = new Date();
JwtBuilder builder= Jwts.builder()
.setId(UUID.randomUUID().toString()) // 载荷-标准中注册的声明
.setSubject("admin") // 载荷-标准中注册的声明
.setIssuedAt(now) // 载荷-标准中注册的声明,表示签发时间
.claim("id", "123456") // 载荷-公共的声明
.claim("name", "MoonlightL") // 载荷-公共的声明
.claim("sex", "male") // 载荷-公共的声明
.signWith(key); // 签证
String jwt = builderpact();
System.out.println("生成的 jwt :" +jwt);
System.out.println("=============解析 JWT===========");
try {
Jws<Claims> result = Jwts.parser().setSigningKey(key).parseClaimsJws(jwt);
// 以下步骤随实际情况而定,只要上一行代码执行不抛异常就证明 jwt 是有效的、合法的
Claims body = result.getBody();
System.out.println("载荷-标准中注册的声明 id:" + body.getId());
System.out.println("载荷-标准中注册的声明 subject:" + body.getSubject());
System.out.println("载荷-标准中注册的声明 issueAt:" + body.getIssuedAt());
System.out.println("载荷-公共的声明的 id:" + result.getBody().get("id"));
System.out.println("载荷-公共的声明的 name:" + result.getBody().get("name"));
System.out.println("载荷-公共的声明的 sex:" + result.getBody().get("sex"));
} catch (JwtException ex) { // jwt 不合法或过期都会抛异常
ex.printStackTrace();
}
}
}
JWTTest2.java
代码语言:javascript代码运行次数:0运行复制package com.example.demo.jwt;
import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.security.Key;
import java.util.Date;
import java.util.UUID;
/**
* 报错信息解决:
* io.jsonwebtoken.security.WeakKeyException: The signing key's size is 96 bits which is not secure enough for the HS256 algorithm. The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used with HS256 MUST have a size >= 256 bits (the key size must be greater than or equal to the hash output size). Consider using the io.jsonwebtoken.security.Keys class's 'secretKeyFor(SignatureAlgorithm.HS256)' method to create a key guaranteed to be secure enough for HS256. See .2 for more information.
* 将JWS_SECRET key的长度加长。
*/
public class JWTTest2 {
private static final String JWS_SECRET = "fsfsfsfs1211212fdsfsfsdfsfsfsfsfsfaaaaeweweewsssssssssssssss";
private static final String JWS_BODY_KEY = "jwtTxt";
public static void main(String[] args) {
String jwt = "";
try {
System.out.println("=============创建 JWT===========");
String json = "你好中国2022"; //可以考虑存储为json字符串
SignatureAlgorithm sa = SignatureAlgorithm.HS256;
byte[] ksBytes = DatatypeConverter.parseBase64Binary(JWS_SECRET);
Key signKey = new SecretKeySpec(ksBytes, sa.getJcaName());
JwtBuilder builder = Jwts.builder().setHeaderParam("typ", "JWT")
.claim(JWS_BODY_KEY, json)
.signWith(sa, signKey);
jwt = builderpact();
System.out.println("生成的 jwt :" +jwt);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("=============解析 JWT===========");
try {
Jws<Claims> jws = Jwts.parser().setSigningKey(DatatypeConverter.parseBase64Binary(JWS_SECRET)) .parseClaimsJws(jwt.trim());
Claims body = jws.getBody();
Object jbk = body.get(JWS_BODY_KEY);
System.out.println("content=" + jbk.toString().trim());
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行效果图及验证:
访问地址:
本文标签: jwt 加密和解密demo
版权声明:本文标题:jwt 加密和解密demo 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754988774a1709114.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论