首页>代码>Spring Boot整合Shiro+Jwt前后端分离简单实例>/spring-boot-shiro-unless-session/src/main/java/com/cxs/jwt/JwtUtil.java
package com.cxs.jwt;
import com.alibaba.fastjson.JSON;
import com.cxs.model.User;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/*
* @Project:spring-boot-shiro-demo
* @Author:cxs
* @Motto:放下杂念,只为迎接明天更好的自己
* */
@Component
public class JwtUtil {
@Value("${auth.jwt.signingKey}")
private String signingKey;
@Value("${auth.jwt.validityTime:30}")
private Integer validityTime;
/**
* 获得token
*
* @param user
* @return
*/
public String generateToken(User user) {
Map<String, Object> hashMap = JSON.parseObject(JSON.toJSONString(user), HashMap.class);
Date now = new Date();
Date expiration = new Date(System.currentTimeMillis() + validityTime * 60 * 1000);
return Jwts.builder()
.setId(user.getId() + "")
.addClaims(hashMap)
.setIssuedAt(now)
.setExpiration(expiration)
.signWith(SignatureAlgorithm.HS256, signingKey).compact();
}
/**
* 解析token
*
* @param token
* @return SignatureException 无效
* ExpiredJwtException 过期
*/
public Token parseToken(String token) {
User user = new User();
Token result = new Token();
Claims claims = null;
claims = Jwts.parser()
.setSigningKey(signingKey)
.parseClaimsJws(token)
.getBody();
if (ObjectUtils.isEmpty(claims)) {
return null;
}
result.setToken(token);
result.setIssuedAtTime(LocalDateTime.ofInstant(claims.getIssuedAt().toInstant(), ZoneId.systemDefault()));
result.setExpirationTime(LocalDateTime.ofInstant(claims.getExpiration().toInstant(), ZoneId.systemDefault()));
user = JSON.parseObject(JSON.toJSONString(claims), User.class);
result.setUser(user);
return result;
}
/**
* 判断是否过期
*
* @param token
* @return
*/
public boolean validTokenIssued(String token) {
Claims claims = Jwts.parser()
.setSigningKey(signingKey)
.parseClaimsJws(token)
.getBody();
Date expiration = claims.getExpiration();
return expiration.before(new Date());
}
}
最近下载更多
zolscy LV24
2024年11月27日
微信网友_7134912998903808 LV15
2024年9月11日
zhujunnan LV12
2024年3月4日
hanl LV12
2023年9月12日
zhaobing_g LV3
2023年8月29日
全栈小白 LV35
2023年4月25日
爱情戴罪的羔羊 LV7
2023年1月13日
欠踹de背影 LV25
2023年1月9日
最代码官方 LV168
2023年1月7日

最近浏览