您的位置 首页 php

Java,安全,JWT,jjwt,token应用案例

前言:

上一节, ,这里是另外一种实现jjwt组件的代码案例,主要包含创建token和解析token。

之前的相关内容:

代码案例:

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

创建Token和解析Token

 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.*;

public class CreateAndSignTokenDemo {

    public static void main(String[] args) {
        String token = generalToken();
        System.out.println(token);
        // 输出:
        // eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VycyIsImlzcyI6IkZVUUktUEMiLCJleHAiOjE2MTM2Mzk4OTQsInVzZXJJZCI6IueUqOaIt0lEIiwiaWF0IjoxNjEzNjM5Mjk0LCJqdGkiOiI1YmEzZDUxYS1iYWNjLTQwOWUtOTNjMC04NTM3ZDFkMzAwMmEiLCJ1c2VybmFtZSI6IueUqOaIt-WQjeensCJ9.Y-Fzts0q1mjoGZW_LjRnnfFoutTZQenR1rIQ6cTEh3w
        Claims claims = parseToken(token);
        System.out.println(claims);
        //输出:
        //{sub=users, iss=auth0, exp=1613641143, userId=用户ID, iat=1613640543, jti=b9e415d1-425e-40b4-b62b-6d8240f46b6f, username=用户名称}
    }

    /**
     * 生成密钥
     *
     * @return
     */    public static SecretKey generalKey() {
        String stringKey = "7786df7fc3a34e26a61c034d5ec8245d";
        byte[] encodedKey = Base64.getEncoder().encode(stringKey.getBytes());
        SecretKey secretKey = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
        return secretKey;
    }

    /**
     * @return
     */    public static String generalToken() {
        try {
            // 设置签发算法
            SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
            // 生成密钥
            SecretKey key = generalKey();
            // 设置私有声明
            Map<String, Object> claims = new HashMap<>(16);
            claims.put("userId", "用户ID");
            claims.put("username", "用户名称");
            // 记录生成JWT的时间
            long nowMillis = System.currentTimeMillis();
            Date nowTime = new Date(nowMillis);
            // 设置过期时间 6分钟
            long expMillis = nowMillis + 10 * 60 * 1000;
            Date expTime = new Date(expMillis);
            // 创建tocken构建器实例
            JwtBuilder jwtBuilder = Jwts.builder()
                    // 设置自己的私有声明
                    .setClaims(claims)
                    // 设置该tocken的Id,用于防止tocken重复
                    .setId(UUID.randomUUID().toString())
                    // 设置签发者
                    .setIssuer("auth0")
                    // 设置签发时间
                    .setIssuedAt(nowTime)
                    // 设置过期时间
                    .setExpiration(expTime)
                    // 设置tocken的签发对象
                    .setSubject("users")
                    // 设置签发算法和密钥
                    .signWith(signatureAlgorithm, key);
            return jwtBuilder.compact();
        } catch (Exception e) {
            e.printStackTrace();
            return "生成tocken失败";
        }
    }

    /**
     * 解析tocken,从中提取出声明信息,里面包含用户信息
     *
     * @param tocken
     * @return
     */    public static Claims parseToken(String tocken) {
        SecretKey key = generalKey();
        // 获取tocken中的声明部分
        Claims claims = Jwts.parser()
                .setSigningKey(key)
                .parseClaimsJws(tocken).getBody();
        return claims;
    }

}  

文章来源:智云一二三科技

文章标题:Java,安全,JWT,jjwt,token应用案例

文章地址:https://www.zhihuclub.com/79630.shtml

关于作者: 智云科技

热门文章

网站地图