关于“如何使用JJWT及JWT讲解和工具类”的完整攻略,我这里为大家详细讲解。
什么是JWT
JWT是JSON Web Token的缩写,是一种轻量级的身份认证和授权机制。它允许跨域安全地传递信息,该信息可以被验证和信任,因为它是数字签名的。JWT通常用于Web应用程序的身份验证和授权,以及用户管理。
一个JWT由三个部分组成:头部(Header)、载荷(Payload)和签名(Signature)。其中头部描述该JWT的元数据,载荷描述所传输信息的数据,签名则保证了头部和载荷的完整性和真实性。
JWT的优点
- 无需在服务端存储session信息,更好的水平扩展
- 跨语言、跨平台互操作性好
- 轻量、高效
如何使用JJWT
JJWT是Java JWT的缩写,是一个简单易用的Java JWT实现库。它提供简单的API,支持JWT的生成和验证。
Maven依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
生成JWT
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import java.security.Key;
Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
String jws = Jwts.builder().setSubject("xueyou").signWith(key).compact();
System.out.println(jws);
解析JWT
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
String jws = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ4dWV5b3UiLCJleHAiOjE2MjQ3OTcwMDAsImlhdCI6MTYyNDczMTAwMH0.4BZWU_92M1q33AkYOT6a1wxjEkXEKf1GKGlWl7_trSo";
Claims claims = Jwts.parser()
.setSigningKey("secret")
.parseClaimsJws(jws)
.getBody();
System.out.println("Subject: " + claims.getSubject());
System.out.println("Expiration: " + claims.getExpiration());
JWT的工具类
除了使用JJwt生成和解析JWT之外,还可以通过封装工具类的方式来更方便的处理JWT。
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import java.nio.charset.StandardCharsets;
import java.security.Key;
import java.util.Date;
public class JwtUtils {
private static final byte[] SECRET_BYTES = "secret".getBytes(StandardCharsets.UTF_8);
private static Key jwtKey = Keys.hmacShaKeyFor(SECRET_BYTES);
public static String createToken(String subject) {
Date now = new Date();
Date exp = new Date(now.getTime() + 3600 * 1000L); // 有效期为1小时
return Jwts.builder()
.setIssuer("Example")
.setSubject(subject)
.setIssuedAt(now)
.setExpiration(exp)
.signWith(jwtKey, SignatureAlgorithm.HS256)
.compact();
}
public static Jws<Claims> parseToken(String token) {
return Jwts.parserBuilder()
.setSigningKey(jwtKey)
.build()
.parseClaimsJws(token);
}
}
上述代码中,JwtUtils类提供了两个静态方法:createToken用于创建JWT,parseToken用于解析JWT。
其中,createToken使用Jwts.builder()来配置JWT的Header和Payload,使用signWith方法进行签名,最后通过compact()方法生成JWT。
而parseToken则使用Jwts.parserBuilder()进行解析签名和校验有效期等信息。该方法的返回值是Jws
示例说明
示例一:使用JJwt生成和解析JWT
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import java.security.Key;
import java.util.Date;
public class JjwtExample {
public static void main(String[] args) {
Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
String jws = Jwts.builder()
.setSubject("user")
.setExpiration(new Date(System.currentTimeMillis() + 86400))
.signWith(key)
.compact();
Claims claims = Jwts.parser()
.setSigningKey(key)
.parseClaimsJws(jws)
.getBody();
System.out.println("Subject: " + claims.getSubject());
System.out.println("Expiration: " + claims.getExpiration());
}
}
在上述代码中,使用Jjwt生成JWT,并使用parseClaimsJws方法进行解析。
示例二:使用工具类生成和解析JWT
public class JwtUtilsExample {
public static void main(String[] args) {
String token = JwtUtils.createToken("user");
System.out.println(token);
Jws<Claims> jws = JwtUtils.parseToken(token);
System.out.println("Subject: " + jws.getBody().getSubject());
System.out.println("Expiration: " + jws.getBody().getExpiration());
}
}
在上述代码中,使用JwtUtils工具类生成和解析JWT。
以上是“如何使用JJWT及JWT讲解和工具类”的完整攻略,希望能对你有所帮助。如果有任何问题可以继续提问。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用JJWT及JWT讲解和工具类 - Python技术站