java中使用jwt

作者: IT小池 | 来源:发表于2020-02-15 21:51 被阅读0次

官网
导包:

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>

新建类JwtUtils

package com.blog.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.CompressionCodecs;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

/**
 * jwt工具类
 */
public class JwtUtils {
    /**
     * 实例
     */
    private static JwtUtils instance;

    /**
     * 发行者
     */
    private String subObject = "owner";

    /**
     * 过期时间,默认7天
     */
    private long expired = 1000 * 60 * 60 * 24 * 7;

    /**
     * jwt构造
     */
    private static JwtBuilder jwtBuilder;

    /**
     * 密钥
     */
    private String secret = "secret";// 密钥

    /**
     * 获取实例
     * @return
     */
    public static JwtUtils getInstance(){
        if (instance == null){
            instance = new JwtUtils();
        }
        jwtBuilder = Jwts.builder();
        return instance;
    }

    /**
     * 荷载信息(通常是一个User信息,还包括一些其他的元数据)
     * @param key
     * @param val
     * @return
     */
    public JwtUtils setClaim(String key,Object val){
        jwtBuilder.claim(key,val);
        return this;
    }

    /**
     * 生成 jwt token
     * @return
     */
    public String generateToken(){
        String token = jwtBuilder
                .setSubject(subObject) // 发行者
                //.claim("id","121") // 参数
                .setIssuedAt(new Date()) // 发行时间
                .setExpiration(new Date(System.currentTimeMillis() + expired))
                .signWith(SignatureAlgorithm.HS256,secret) // 签名类型 与 密钥
                .compressWith(CompressionCodecs.DEFLATE)// 对载荷进行压缩
                .compact(); // 压缩一下
        return token;
    }

    /**
     * 解析 token
     * @param token
     * @return
     */
    public Claims check(String token){
        try{
            final Claims claims = Jwts.parser()
                    .setSigningKey(secret)
                    .parseClaimsJws(token)
                    .getBody();
            return claims;
        }catch (Exception e){}
        return null;
    }

    public String getSubObject() {
        return subObject;
    }

    /**
     * 设置发行者
     * @param subObject
     * @return
     */
    public JwtUtils setSubObject(String subObject) {
        this.subObject = subObject;
        return this;
    }

    public long getExpired() {
        return expired;
    }

    /**
     * 设置过期时间
     * @param expired
     * @return
     */
    public JwtUtils setExpired(long expired) {
        this.expired = expired;
        return this;
    }

    public String getSecret() {
        return secret;
    }

    /**
     * 设置密钥
     * @param secret
     * @return
     */
    public JwtUtils setSecret(String secret) {
        this.secret = secret;
        return this;
    }
}

使用

public static void main(String[] args) {
        JwtUtils jwt = JwtUtils.getInstance();
        String token = jwt
                .setClaim("id",789)
                .setClaim("name","xiaochi")
                .setExpired(50000)
                .generateToken();
        System.out.println(token);

        System.out.println("-----------------------");

        String s = "eyJhbGciOiJIUzI1NiJ9.eyJpZCI6Nzg5LCJuYW1lIjoieGlhb2NoaSIsInN1YiI6Im93bmVyIiwiaWF0IjoxNTgxNzc0MjE4LCJleHAiOjE1ODE3NzQyNjh9.VLWsIJUrG6VD1nbxgbvEmAu5dLCtpb0r1ToYdmilcAQ";
        Claims claims = jwt.check(s);
        if (claims != null){
            Integer id = (Integer)claims.get("id");
            String name = (String) claims.get("name");
            System.out.println(id);
            System.out.println(name);
        }else {
            System.out.println("非法token");
        }
}

到此完成。

相关文章

网友评论

    本文标题:java中使用jwt

    本文链接:https://www.haomeiwen.com/subject/nbcufhtx.html