liyanqi
2022-09-09 d729d924aff31c769b90adc99d998d38cdf50ec0
ycl-common/src/main/java/com/ycl/utils/JwtTokenUtil.java
@@ -2,6 +2,11 @@
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ycl.entity.auth.AuthInfo;
import com.ycl.enums.common.ResultCode;
import com.ycl.exception.ApiException;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
@@ -27,7 +32,7 @@
 */
public class JwtTokenUtil {
    private static final Logger LOGGER = LoggerFactory.getLogger(JwtTokenUtil.class);
    private static final String CLAIM_KEY_USERNAME = "sub";
    private static final String CLAIM_KEY_INFO = "sub";
    private static final String CLAIM_KEY_CREATED = "created";
    @Value("${jwt.secret}")
    private String secret;
@@ -116,7 +121,7 @@
     */
    public String generateToken(UserDetails userDetails) {
        Map<String, Object> claims = new HashMap<>();
        claims.put(CLAIM_KEY_USERNAME, userDetails.getUsername());
        claims.put(CLAIM_KEY_INFO, userDetails.getUsername());
        claims.put(CLAIM_KEY_CREATED, new Date());
        return generateToken(claims);
    }
@@ -154,6 +159,7 @@
    /**
     * 判断token在指定时间内是否刚刚刷新过
     *
     * @param token 原token
     * @param time 指定时间(秒)
     */
@@ -167,4 +173,32 @@
        }
        return false;
    }
    public AuthInfo parseToken(String token) {
        AuthInfo authInfo = null;
        try {
            if (isTokenExpired(token)) {
                throw new ApiException(ResultCode.NOT_LOGGED);
            }
            Claims claims = getClaimsFromToken(token);
            String subject = claims.getSubject();
            authInfo = JSON.parseObject(subject, AuthInfo.class);
        } catch (Exception e) {
            throw new ApiException(e.getMessage());
        }
        return authInfo;
    }
    /**
     * 根据用户id,用户名生成token
     */
    public String generateToken(long userId, String username) {
        Map<String, Object> claims = new HashMap<>();
        AuthInfo authInfo = new AuthInfo();
        authInfo.setUserId(userId);
        authInfo.setUsername(username);
        claims.put(CLAIM_KEY_INFO, JSONObject.toJSONString(authInfo));
        claims.put(CLAIM_KEY_CREATED, new Date());
        return generateToken(claims);
    }
}