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

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

首页角色扮演代号wt完整版更新时间:2024-04-27
前言:

上一节,,这里是另外一种实现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; } }

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved