JWT

612 阅读1分钟

大佬文章

JWT详解_baobao555#的博客

使用hutool实现

JWT (hutool-码云(gitee.com))

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.7.20</version>
</dependency>
import cn.hutool.core.date.DateUnit;
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTUtil;
import com.ticknet.face_to_face_back.common.utils.ServletUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * Token工具类
 *
 * @author jjjzzzqqq
 */
@Service
public class TokenService {
    // 令牌自定义标识
    @Value("${token.header}")
    private String header;

    // 令牌秘钥
    @Value("${token.secret}")
    private String secret;

    // 令牌有效期(默认30分钟)
    @Value("${token.expireTime}")
    private int expireTime;

    //创建token
    public  String createToken(Long userId , String userName, String nickName) {
        //默认使用HS265(HmacSHA256)算法
        byte [] key = secret.getBytes();
        return JWT.create()
                .setPayload("userId", userId)
                .setPayload("userName", userName)
                .setPayload("nickName", nickName)
                .setExpiresAt(new Date(System.currentTimeMillis()+ expireTime * DateUnit.MINUTE.getMillis()))
                .setIssuedAt(new Date())
               .setSigner(JWTSignerUtil.hs256(key))
               //.setKey(key)
               .sign();
    }
    //验证token是否有效
    public boolean verify() {
        String token = ServletUtils.getRequest().getHeader(header);
        System.out.println("验证的token:" + token);
        byte [] key = secret.getBytes();
        try {
            return JWT.of(token).setKey(key).validate(0);
        } catch (Exception e) {
            return false;
        }
    }
    //通过token获取用户id
    public Integer getUserIdByToken() {
        String token = ServletUtils.getRequest().getHeader(header);
        final JWT jwt = JWTUtil.parseToken(token);
        return (Integer)jwt.getPayload("userId");
    }
}

使用jjwt实现

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>
import com.mszlu.blogapi.entity.SysUser;
import io.jsonwebtoken.Jwt;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JWTUtils {
    private static final String jwtToken = "123456Mszlu!@#$$";

    public static String createToken(SysUser sysUser){
        Map<String,Object> claims = new HashMap<>();
        claims.put("userId",sysUser.getId());
        claims.put("account",sysUser.getAccount());
        claims.put("nickName",sysUser.getNickname());
        claims.put("avatar",sysUser.getAvatar());
        JwtBuilder jwtBuilder = Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, jwtToken) // 签发算法,秘钥为jwtToken
                .setClaims(claims) // body数据,要唯一,自行设置
                .setIssuedAt(new Date()) // 设置签发时间
                .setExpiration(new Date(System.currentTimeMillis() + 24 * 60 * 60  * 1000));// 一天的有效时间
        String token = jwtBuilder.compact();
        return token;
    }

    public static Map<String, Object> checkToken(String token){
        try {
            Jwt parse = Jwts.parser().setSigningKey(jwtToken).parse(token);
            return (Map<String, Object>) parse.getBody();
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;

    }
}