环境
- springboot
过程
1、pom
依赖
<!--jwt的依赖 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.8.0</version>
</dependency>
2、生成token
private static final String JWTSECRET="myScrect";
/**
* 生成token
*/
public static String create(User user){
if (user==null || user.getId()==null ||user.getName()==null){
return null;
}
String token= Jwts.builder()
.setSubject(JWTSECRET) //设置签名
.claim("id",user.getId()) //设置传入的参数
.claim("name",user.getName())
.setIssuedAt(new Date()) //设置发行的时间
.setExpiration(new Date(System.currentTimeMillis()+2*60*1000)) //1分钟后过期
.signWith(SignatureAlgorithm.HS256,JWTSECRET) //签名算法,密匙
.compact();
return token;
}
3、校验token
/**
* 校验token
*/
public static Claims checkJWT(String token){
//通常如果伪造或token过期都会抛出异常所有包裹一下
try {
final Claims claims=Jwts.parser()
.setSigningKey(JWTSECRET) //设置签名
.parseClaimsJws(token) //解析token
.getBody();
return claims;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
4、测试
/**
* 生成token
*/
@Test
void contextLoads() {
User user=new User();
user.setId(1);
user.setName("king");
String token= JwtUtils.create(user);
System.out.println(token);
}
/**
* 解析
*/
@Test
public void TestCheck(){
String token="eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJteVNjcmVjdCIsImlkIjoxLCJuYW1lIjoia2luZyIsImlhdCI6MTYwNDM3MzA2MiwiZXhwIjoxNjA0MzczMTgyfQ.SVY9GkX912V4gSNaNTEpxV4iIZUeu1fxxUxYy7mvyVs";
Claims claims= JwtUtils.checkJWT(token);
System.out.println(claims);
if (claims!=null){
Integer id=(Integer) claims.get("id");
String name=(String) claims.get("name");
System.out.println(id+"---"+name);
}
}