创建JWT token工具类

导包

        <!-- Token认证 使用JJWT -->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.0</version>
        </dependency>

工具类

package common.security;


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

import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import java.util.Date;
import java.util.Map;

public class TokenJJWT{


    //密钥
    private final static String SCRENT = "!Qq123456";
    //有效期 12小时
    private final static long TOKEN_EXPIRATION = 12*3600*1000L;
    //用户名
    private static String userName = "test";
    //密码
    private static String password = "test123456";

    /**
     * 生成token
     *
     *
     *
     * @return token
     */
    public static String generateToken(Map<String,Object> m){
        //加密类型
        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
        SecretKey secretKey = generalKey();
        Date date = new Date(System.currentTimeMillis()+TOKEN_EXPIRATION);
        JwtBuilder jwtBuilder = Jwts.builder()
                //head的作用主要是表明Signature使用的加密算法和token的类型
                .setHeaderParam("typ","JWT").setHeaderParam("alg","HS256")
                //添加键值对
                .addClaims(m)
                //.claim("password",password)
                //签名 保证内容和签名的东西一致
                .signWith(signatureAlgorithm,secretKey)
                //过期时间
                .setExpiration(date);
        return jwtBuilder.compact();
    }


    /**
     * 加密盐  SecretKey是一个密钥类
     *
     *
     */
    private static SecretKey generalKey(){
        byte[] encodeKey = Base64.getDecoder().decode(SCRENT);
        SecretKey key = new SecretKeySpec(encodeKey,0,encodeKey.length,"AES");
        return key;
    }

    /**
     * 解密token 返回payload的信息主体对象claims
     * @param jwtToken token
     * @return Claims
     */
    public static Claims validateJWT(String jwtToken){
        Claims claims = Jwts.parser()
                .setSigningKey(generalKey())
                .parseClaimsJws(jwtToken).getBody();
        return claims;
    }

    /**
     * 从token中获取key的值
     * @param jwtToken token
     * @param key key
     * @return value
     */
    public static Object get(String jwtToken,String key){
        Claims claims = validateJWT(jwtToken);
        String value = claims.get(key,String.class);
        return value;
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值