首页>代码>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日
最近浏览更多
f22m1a2b2  LV17 1月23日
zolscy  LV24 2024年11月27日
驱蚊器我 2024年11月18日
暂无贡献等级
chenranr  LV10 2024年6月15日
develop  LV10 2024年6月2日
XiaoSong888  LV3 2024年6月2日
llllllK  LV5 2024年5月13日
kenhomeliu  LV29 2024年4月30日
getset  LV8 2024年4月20日
wanglinddad  LV55 2024年4月2日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友