本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1.maven引入包
<!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
2.编写jwt工具包
package com.pgmsg.util;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.List;
public class JwtTokenUtils {
public static final String ISSUE = "pg_msg";
/**
* 私钥
*/
public static final String SECRET_KEY = "SECRET KEY";
/**
* TOKEN的认证形式
*/
public static final String TOKEN_TYPE = "JWT";
/**
* TOKEN 头部名
*/
public static final String TOKEN_HEADER = "Authorization";
/**
* TOKEN 认证的前缀
*/
public static final String TOKEN_PREFIX = "PREFIX";
/**
* TOKEN的超时时间
*/
public static final long TOKEN_EXPIRE = 30 * 60L;
/**
* CLAIMS
*/
public static final String AUTHRITY_CLAIMS = "au";
/**
* 创建token
*/
public static String createJwtToken(Long uid) {
final Date createDate = new Date();
final Date expiredDate = new Date(createDate.getTime() + TOKEN_EXPIRE * 1000);
String jwtToken = Jwts.builder()
.setHeaderParam("type", TOKEN_TYPE)
.signWith(SignatureAlgorithm.HS256, SECRET_KEY)
.setIssuer(ISSUE)
.setIssuedAt(createDate)
.setSubject(uid + "")
.setExpiration(expiredDate)
.compact();
return TOKEN_PREFIX + jwtToken;
}
/**
* 判断token是否过期
*/
public static boolean isTokenExpired(String token) {
Date expireDate = getTokenBody(token).getExpiration();
return expireDate.before(new Date());
}
/**
* 获取绑定的ID
*/
public static String getSubject(String token) {
return getTokenBody(token).getSubject();
}
/**
* 验证token是否有效
*/
public static boolean validateToken(String token, Long uid) {
return Integer.parseInt(getSubject(token)) == uid && !isTokenExpired(token);
}
/**
* 获取tokenBody
*/
private static Claims getTokenBody(String token) {
return Jwts.parser()
.setSigningKey(SECRET_KEY)
.parseClaimsJws(token.replace(TOKEN_PREFIX, ""))
.getBody();
}
}
3.登录使用
String token = JwtTokenUtils.createJwtToken((Long) admin1.getId());
返回结果
{
"status": 200,
"msg": "登录成功!",
"data": "PREFIXeyJ0eXBlIjoiSldUIiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiJwZ19tc2ciLCJpYXQiOjE2Mzg3NzY2ODIsInN1YiI6IjEiLCJleHAiOjE2Mzg3Nzg0ODJ9.jYXmfh2a8CpMRZ-E7hzjoVBWoa-cm0LrSSBoUCu-kik"
}
\