• SpringBoot集成jjwt和使用


    1.引入jwt依赖(这里以jjwt为例,具体其他jwt产品可以参见jwt官网)

    1. <dependency>
    2. <groupId>io.jsonwebtokengroupId>
    3. <artifactId>jjwtartifactId>
    4. <version>0.9.1version>
    5. dependency>

    2.在spring的启动类application.yml中加入配置

    1. jwt:
    2. # 签名,随机设置
    3. signature: IU$S&39S%57!kYs@Nc
    4. # 失效时间(分钟)
    5. destroy_time: 30

    3.完整的jwt工具类代码,复制即可使用

    1. package com.salong.myself.utils.jwt;
    2. import com.alibaba.fastjson.JSONObject;
    3. import io.jsonwebtoken.Claims;
    4. import io.jsonwebtoken.JwtBuilder;
    5. import io.jsonwebtoken.Jwts;
    6. import io.jsonwebtoken.SignatureAlgorithm;
    7. import org.springframework.beans.factory.annotation.Value;
    8. import org.springframework.stereotype.Component;
    9. import java.util.Date;
    10. import java.util.HashMap;
    11. import java.util.UUID;
    12. /**
    13. * @author Salong
    14. * @date 2023/11/16 17:27
    15. * @Email:salong0503@aliyun.com 基于jjwt包的jwt工具包
    16. */
    17. @Component
    18. public class JjwtUtil {
    19. @Value("${jwt.signature}")
    20. public void setSignature(String signature) {
    21. JjwtUtil.signature = signature;
    22. }
    23. @Value("${jwt.destroy_time}")
    24. public void setDestroyTime(int destroyTime) {
    25. JjwtUtil.destroyTime = destroyTime;
    26. }
    27. /**
    28. * signature签名
    29. */
    30. private static String signature;
    31. /**
    32. * jwt失效时间(分钟)
    33. */
    34. private static int destroyTime;
    35. public static void main(String[] args) {
    36. JjwtUtil.signature= "IU$S&39S%57!kYs@Nc";
    37. JjwtUtil.destroyTime = 30;
    38. HashMap map = new HashMap<>();
    39. map.put("name", "张三");
    40. map.put("age", 14);
    41. String token = getToken(map);
    42. System.out.println("token:" + token);
    43. //注意:上述获取的token是可以去类似https://www.box3.cn/tools/jwt.html等jwt等内容解析平台去解析内容的,
    44. // 所以不能放敏感信息,如果要放敏感信息,则颁发的token需要额外的加密和解密才可在网络上流通
    45. Claims claims = parseToken(token);
    46. System.out.println(JSONObject.toJSONString(claims));
    47. }
    48. public static String getToken(HashMap map) {
    49. JwtBuilder jwtBuilder = Jwts.builder()
    50. //唯一id
    51. .setId(UUID.randomUUID().toString())
    52. //todo 接受的用户(一般存用户id,提供的map入参需要给这个参数)
    53. .setSubject("Salong")
    54. //签发时间
    55. .setIssuedAt(new Date())
    56. //设置失效时间(1分钟失效)
    57. .setExpiration(new Date(System.currentTimeMillis() + 60L * 1000 * destroyTime))
    58. //签名算法及秘钥
    59. .signWith(SignatureAlgorithm.HS256, signature)
    60. .addClaims(map);
    61. return jwtBuilder.compact();
    62. }
    63. public static Claims parseToken(String token) {
    64. //解析token
    65. return (Claims) Jwts.parser()
    66. .setSigningKey(signature)
    67. .parse(token)
    68. .getBody();
    69. }
    70. }

  • 相关阅读:
    【Pytorch】Tutorials个人翻译集合
    AI如何修改画布尺寸? ai怎么设置画布大小_AI教程自学网
    剑指offer 47. 把数字翻译成字符串
    电脑文件夹加密怎么操作?保护数据4个方法分享!
    我对微服务架构的简单理解
    OBS实现多路并发推流
    Docker Compose
    LeetCode 462. 最小操作次数使数组元素相等 II【贪心,排序或快速选择】中等
    【数据结构】红黑树的插入与验证
    电子学会青少年软件编程 Python编程等级考试三级真题解析(选择题)2020年9月
  • 原文地址:https://blog.csdn.net/qq_35429398/article/details/134539474