-
@param claims 要传送消息map
-
@return
*/
public static String generate(Map<String,Object> claims) {
Date nowDate = new Date();
//过期时间,设定为一分钟
Date expireDate = new Date(System.currentTimeMillis() + EXPIRE);
//头部信息,可有可无
Map<String, Object> header = new HashMap<>(2);
header.put(“typ”, “jwt”);
//更强的密钥,JDK11起才能用
// KeyPair keyPair = Keys.keyPairFor(SignatureAlgorithm.RS256);
// PrivateKey key1 = keyPair.getPrivate(); // 私钥
//PublicKey key2 = keyPair.getPublic(); //公钥
return Jwts.builder().setHeader(header)
// .setSubject(“weimi”)//主题
// .setIssuer(“weimi”) //发送方
.setClaims(claims) //自定义claims
.setIssuedAt(nowDate)//当前时间
.setExpiration(expireDate) //过期时间
.signWith(key)//签名算法和key
.compact();
}
/**
-
生成token
-
@param header 传入头部信息map
-
@param claims 要传送消息map
-
@return
*/
public static String generate( Map<String, Object> header,Map<String,Object> claims) {
Date nowDate = new Date();
//过期时间,设定为一分钟
Date expireDate = new Date(System.currentTimeMillis() + EXPIRE);
return Jwts.builder().setHeader(header)
// .setSubject(“weimi”)//主题
// .setIssuer(“weimi”) //发送方
.setClaims(claims) //自定义claims
.setIssuedAt(nowDate)//当前时间
.setExpiration(expireDate) //过期时间
.signWith(key)//签名算法和key
.compact();
}
/**
-
校验是不是jwt签名
-
@param token
-
@return
*/
public static boolean isSigned(String token){
return Jwts.parser()
.setSigningKey(key)
.isSigned(token);
}
/**
-
校验签名是否正确
-
@param token
-
@return
*/
public static boolean verify(String token){
try {
Jwts.parser()
.setSigningKey(key)
.parseClaimsJws(token);
return true;
}catch (JwtException e){
System.out.println(e.getMessage());
return false;
}
}
/**
-
获取payload 部分内容(即要传的信息)
-
使用方法:如获取userId:getClaim(token).get(“userId”);
-
@param token
-
@return
*/
public static Claims getClaim(String token) {
Claims claims = null;
try {
claims = Jwts.parser()
.setSigningKey(key)
.parseClaimsJws(token)
.getBody();
} catch (Exception e) {
e.printStackTrace();
}
return claims;
}
/**
-
获取头部信息map
-
使用方法 : getHeader(token).get(“alg”);
-
@param token
-
@return
*/
public static JwsHeader getHeader(String token) {
JwsHeader header = null;
try {
header = Jwts.parser()
.setSigningKey(key)
.parseClaimsJws(token)
.getHeader();
} catch (Exception e) {
e.printStackTrace();
}
return header;
}
/**
- 获取jwt发布时间
*/
public static Date getIssuedAt(String token) {
return getClaim(token).getIssuedAt();
}
/**
- 获取jwt失效时间
*/
public static Date getExpiration(String token) {
return getClaim(token).getExpiration();
}
/**
-
验证token是否失效
-
@param token
-
@return true:过期 false:没过期
*/
public static boolean isExpired(String token) {
try {
final Date expiration = getExpiration(token);
return expiration.before(new Date());
} catch (ExpiredJwtException expiredJwtException) {
return true;
}
}
/**
-
直接Base64解密获取header内容
-
@param token
-
@return
*/
public static String getHeaderByBase64(String token){
String header = null;
if (isSigned(token)){
try {
byte[] header_byte = Base64.getDecoder().decode(token.split(“\.”)[0]);
header = new String(header_byte);
}catch (Exception e){
e.printStackTrace();
return null;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/1a14f86209882edc8165f30eefd539d7.jpeg)
线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识
一线互联网P7面试集锦+各种大厂面试集锦
学习笔记以及面试真题解析
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识
[外链图片转存中…(img-gzmsOOdg-1712583738078)]
一线互联网P7面试集锦+各种大厂面试集锦
[外链图片转存中…(img-1MyYivSE-1712583738078)]
学习笔记以及面试真题解析
[外链图片转存中…(img-6CSvvAq9-1712583738079)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!