JWT 安全令牌

 1 package com.reliable.yang.utils;
 2 
 3 import io.jsonwebtoken.Jwt;
 4 import io.jsonwebtoken.JwtBuilder;
 5 import io.jsonwebtoken.Jwts;
 6 import io.jsonwebtoken.SignatureAlgorithm;
 7 
 8 import java.util.Date;
 9 import java.util.HashMap;
10 import java.util.Map;
11 
12 /**
13  * @author Administrator
14  * @date 2022-06-21 20:53
15  */
16 /*
17     jwt 可以生成 一个加密的token,做为用户登录的令牌,当用户登录成功之后,发放给客户端。
18     请求需要登录的资源或者接口的时候,将token携带,后端验证token是否合法。
19     jwt 有三部分组成:A.B.C
20     A:Header,{"type":"JWT","alg":"HS256"} 固定
21     B:playload,存放信息,比如,用户id,过期时间等等,可以被解密,不能存放敏感信息
22     C: 签证,A和B加上秘钥 加密而成,只要秘钥不丢失,可以认为是安全的。
23     jwt 验证,主要就是验证C部分 是否合法。
24  */
25 public class JWTUtils {
26     // 秘钥 jwtToken
27     private static final String jwtToken = "123456reliable!@###$$";
28 
29     public static String createToken(Long userId){
30         Map<String,Object> claims = new HashMap<>();
31         claims.put("userId",userId);
32         JwtBuilder jwtBuilder = Jwts.builder()
33                 .signWith(SignatureAlgorithm.HS256, jwtToken) // 签发算法,秘钥为jwtToken
34                 .setClaims(claims) // body数据,要唯一,自行设置
35                 .setIssuedAt(new Date()) // 设置签发时间
36                 .setExpiration(new Date(System.currentTimeMillis() + 24 * 60 * 60 * 60 * 1000));// 一天的有效时间
37         String token = jwtBuilder.compact();
38         return token;
39     }
40 
41     public static Map<String, Object> checkToken(String token){
42         try {
43             Jwt parse = Jwts.parser().setSigningKey(jwtToken).parse(token);
44             return (Map<String, Object>) parse.getBody();
45         }catch (Exception e){
46             e.printStackTrace();
47         }
48         return null;
49     }
50 
51     // 测试
52     public static void main(String[] args) {
53         String token = JWTUtils.createToken(100L);
54         System.out.println("生成的令牌为: "+token);
55 
56         Map<String,Object> map = JWTUtils.checkToken(token);
57         System.out.println("获取结果: "+map.get("userId"));
58 
59     }
60 }

 

posted @ 2022-06-21 21:00  靠谱杨  阅读(110)  评论(0编辑  收藏  举报