- 导入 jjwt 依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
- 生成 token,使用工具类 Jwts 的 builder() 方法,完成用户验证后返回 token 给客户端
public class CreateJwt {public static void main(String[] args) {JwtBuilder jwtBuilder = Jwts.builder().setId("88").setSubject("小白")
.setIssuedAt(new Date())
.signWith(SignatureAlgorithm.HS256, "liang")
// 添加非私密的其它内容
.claim("companyId","123456")
.claim("companyName","腾讯");
String token = jwtBuilder.compact();
System.out.println(token);
}
}
- 用户发送请求是携带 token, 解析 token
public class ParseJwt {public static void main(String[] args) {
String token="eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI4OCIsInN1YiI6IuWwj-eZvSIsImlhdCI6MTU5MTE4ODgyNiwiY29tcGFueUlkIjoiMTIzNDU2IiwiY29tcGFueU5hbWUiOiLohb7orq8ifQ.jwJbTI_qCW365JgTtxeGz_jFXyFtQ4be-OCp5ezR4n8";
Claims claims = Jwts.parser().setSigningKey("liang").parseClaimsJws(token).getBody();
System.out.println(claims.getId());
System.out.println(claims.getSubject());
System.out.println(claims.getIssuedAt());
// 解析自定义的 claim 中的内容
String companyId = (String) claims.get("companyId");
String companyName = (String) claims.get("companyName");
System.out.println(companyId);
System.out.println(companyName);
}
}
- 将生成和解析封装成工具类
package com.springboot.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.Map;
@Getter
@Setter
@ConfigurationProperties("jwt.config")
@Component
public class JwtUtils {
// 签名私钥
private String key;
// 签名有效时间
private long ttl;
public String createJwtToken(String id, String name, Map<String,Object> map){
// 设置失效时间
// 获取当前时间
long now=System.currentTimeMillis();
// 当前时间 + 有效时间 = 过期时间
long exp=now+ttl;
// 创建 JwtBuilder
JwtBuilder jwtBuilder = Jwts.builder().setId(id).setSubject(name)
.setIssuedAt(new Date())
.signWith(SignatureAlgorithm.HS256, key);
// 根据 map 设置 clamis
jwtBuilder.setClaims(map);
// 设置失效时间
jwtBuilder.setExpiration(new Date(exp));
String token = jwtBuilder.compact();
return token;
}
public Claims parseToken(String token){Claims claims = Jwts.parser().setSigningKey("liang").parseClaimsJws(token).getBody();
return claims;
}
}