前言:
今天你们对“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