一、JWT
JSON Web Token
(JWT)是一个开放标准(RFC 7519),定义了一种紧凑且自包含的方式,以JSON
对象的形式在各方之间安全地传输信息。这种信息可以被验证和信任,因为它是数字签名的。具体来说,JWT
是一种用于在不同系统间身份验证的json
对象,它主要由三部分组成:header
(头部)、payload
(载荷)和signature
(签名)。
JWT
的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。由于其规范化的JSON
结构,使得JWT
应用非常广泛,是目前最流行的跨域认证解决方案之一。
二、案例
案例还是以工具类为主,方便各位拿去直接可以使用:
引入依赖:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
工具类代码:
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* JWT工具类
*/
public class JwtUtils {
/**
* 签名密钥
*/
private static final String signKey = "Jerryean";
/**
* 有效时间
*/
private static final Long expire = 43200000L;
/**
* 生成JWT令牌
*
* @param claims JWT第二部分负载 payload 中存储的内容
*/
public static String generateJwt(Map<String, Object> claims) {
return Jwts.builder()
.addClaims(claims)//自定义信息(有效载荷)
.signWith(SignatureAlgorithm.HS256, signKey)//签名算法(头部)
.setExpiration(new Date(System.currentTimeMillis() + expire))//过期时间
.compact();
}
/**
* 解析JWT令牌
*
* @param jwt JWT令牌
* @return JWT第二部分负载 payload 中存储的内容
*/
public static Claims parseJWT(String jwt) {
return Jwts.parser()
.setSigningKey(signKey)//指定签名密钥
.parseClaimsJws(jwt)//指定令牌Token
.getBody();
}
public static void main(String[] args) {
Map<String, Object> map = new HashMap<>();
map.put("orgId", "1");
map.put("username", "admin");
String jwt_token = JwtUtils.generateJwt(map);
System.out.println(jwt_token);
Claims claims = JwtUtils.parseJWT(jwt_token);
System.out.println(claims);
}
}
测试结果: