• SpringBoot-JWT生成


     一、理论

    1.配置pom.xml

    1. <!-- JWT令牌-->
    2. <dependency>
    3. <groupId>io.jsonwebtoken</groupId>
    4. <artifactId>jjwt</artifactId>
    5. <version>0.9.1</version>
    6. </dependency>

    2.加密方式

     说明:官网JSON Web Tokens - jwt.io

    3. 测试类

    说明:使用Jwts.builder()方法创建一个JWT实例,设置签名算法为HS256,自定义内容(载荷)为一个包含id和name属性的Map对象,设置有效期为一个小时(3600秒),最后通过compact()方法生成JWT字符串并输出。

    1. // 测试jwt生成
    2. @Test
    3. public void testGenJWT(){
    4. Map claims=new HashMap<>();
    5. claims.put("id",1);
    6. claims.put("name","tom");
    7. String jwt=Jwts.builder()
    8. .signWith(SignatureAlgorithm.HS256,"forever") //设置签名算法
    9. .setClaims(claims) //自定义内容(载荷)
    10. .setExpiration(new Date(System.currentTimeMillis()+3600*1000)) //设置有效期为一个小时
    11. .compact();
    12. System.out.println(jwt);
    13. }
    14. }

    4. 官网解码

    5.解码方法

    说明:使用Jwts.parser()方法创建一个JWT解析器实例,指定签名秘钥为"forever",然后调用parseClaimsJws()方法解析JWT字符串,最后获取解析出的Claims对象并输出。

    1. //JWT解析
    2. @Test
    3. public void testParseJwt() {
    4. Claims claims = Jwts.parser()
    5. .setSigningKey("forever") //指定签名秘钥
    6. .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoidG9tIiwiaWQiOjEsImV4cCI6MTY5NTE5MzIxM30.EZ3aIpgt3-FRu0BI3F2ZjVm2yLvF7wHQmFV2KhC5nIc") //解析令牌
    7. .getBody();
    8. System.out.println(claims);
    9. }
    10. }

    二、实战

    1. JwtUtils类

    说明:书写JwtUtils类

    1. package com.itheima.controller.utils;
    2. import io.jsonwebtoken.Claims;
    3. import io.jsonwebtoken.Jwts;
    4. import io.jsonwebtoken.SignatureAlgorithm;
    5. import java.util.Date;
    6. import java.util.Map;
    7. public class JwtUtils {
    8. private static String signKey = "forever";
    9. private static Long expire = 43200000L;
    10. /**
    11. * 生成JWT令牌
    12. * @param claims JWT第二部分负载 payload 中存储的内容
    13. * @return
    14. */
    15. public static String generateJwt(Map claims){
    16. String jwt = Jwts.builder()
    17. .addClaims(claims)
    18. .signWith(SignatureAlgorithm.HS256, signKey)
    19. .setExpiration(new Date(System.currentTimeMillis() + expire))
    20. .compact();
    21. return jwt;
    22. }
    23. /**
    24. * 解析JWT令牌
    25. * @param jwt JWT令牌
    26. * @return JWT第二部分负载 payload 中存储的内容
    27. */
    28. public static Claims parseJWT(String jwt){
    29. Claims claims = Jwts.parser()
    30. .setSigningKey(signKey)
    31. .parseClaimsJws(jwt)
    32. .getBody();
    33. return claims;
    34. }
    35. }

    2.LoginController

    说明:登录控制类

    1. package com.itheima.controller;
    2. import com.itheima.controller.utils.JwtUtils;
    3. import com.itheima.pojo.Emp;
    4. import com.itheima.pojo.Result;
    5. import com.itheima.service.EmpService;
    6. import lombok.extern.slf4j.Slf4j;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.web.bind.annotation.PostMapping;
    9. import org.springframework.web.bind.annotation.RequestBody;
    10. import org.springframework.web.bind.annotation.RestController;
    11. import java.util.HashMap;
    12. import java.util.Map;
    13. @Slf4j
    14. @RestController
    15. public class LoginController {
    16. @Autowired
    17. private EmpService empService;
    18. @PostMapping("/login")
    19. public Result login(@RequestBody Emp emp) {
    20. log.info("员工登录:{}", emp);
    21. Emp e = empService.login(emp);
    22. // 如果登录成功,生成令牌,下发令牌
    23. if (e != null) {
    24. Map claims = new HashMap<>();
    25. claims.put("id", e.getId());
    26. claims.put("name", e.getName());
    27. claims.put("username", e.getName());
    28. String jwt = JwtUtils.generateJwt(claims); //包含员工登录的信息
    29. return Result.success(jwt);
    30. }
    31. // 登录失败,返回错误信息
    32. return Result.error("用户名或者密码错误");
    33. }
    34. }

    3.测试

  • 相关阅读:
    linux os cpufreq 调频
    什么是元编程
    2022.11.22Longest Ordered Subsequence POJ - 2533
    中国高级测试经理对敏捷测试的理解
    php-fpm基本配置
    学习Kotlin看哪些书?【赠书活动|第八期《深入实践Kotlin元编程》】
    独立站广告投放,哪些细节影响独立站的转化率
    企业工程项目管理系统源码+项目模块功能清单+spring cloud +spring boot
    Java-基础语法
    《Molecular Plant》新思路:比较转录组+比较基因组研究小麦高效氮利用分子机制
  • 原文地址:https://blog.csdn.net/m0_62785037/article/details/133081409