龙空技术网

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

古怪今人 243

前言:

今天你们对“javajj”大约比较讲究,我们都想要了解一些“javajj”的相关内容。那么小编同时在网摘上收集了一些关于“javajj””的相关内容,希望你们能喜欢,大家一起来了解一下吧!

前言:

上一节,Java,安全,JWT,java-jwt,token应用案例,这里是另外一种实现jjwt组件的代码案例,主要包含创建token和解析token。

之前的相关内容:Java,SpringBoot采用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;    }}

标签: #javajj