java Spring Boot整合jwt实现token生成

先在 pom.xml 文件中注入依赖

xml 复制代码
<!-- JWT -->
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.11.2</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>0.11.2</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId>
    <version>0.11.2</version>
    <scope>runtime</scope>
</dependency>

然后 这里 我们加一个属性类 用于用户登录使用 这里 我就搞简单一点 直接 一个id 一个name了

这里需要注意的是 如果你想通过id生成token 那么 你的id必须是个字符串

然后 随便找个能扫描到的目录创建一个类 叫 JwtUtils.java

因为登录接口要用 JwtUtils 所以 最好建在登录接口的类的同目录下

参考代码如下

java 复制代码
package com.example.webdom.controller;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class JwtUtils {

    private final String secret = "4wAJAxLrSdtgJC8G2jsC/IcJMPfAp+a3IHJBYZkufYCQdh2Afk1TeHRgSwX/fEXHBGaP8mftoUiSd22G93GJ5A==";
    private final long expiration = 86400000; // 过期时间设置为24小时

    public String generateToken(String userid) {
        Date now = new Date();
        Date expiryDate = new Date(now.getTime() + expiration);

        return Jwts.builder()
                .setSubject(userid)
                .setIssuedAt(now)
                .setExpiration(expiryDate)
                .signWith(SignatureAlgorithm.HS512, secret)
                .compact();
    }

    public String getUsernameFromToken(String token) {
        Claims claims = Jwts.parser()
                .setSigningKey(secret)
                .parseClaimsJws(token)
                .getBody();

        return claims.getSubject();
    }

    public boolean validateToken(String token) {
        try {
            Jwts.parser().setSigningKey(secret).parseClaimsJws(token);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}

这里这个 secret 是基于这个秘钥和用户id来创建token的 就是说 secret 这个密码一定要统一

这个后面大家可以自己去了解一下

然后 我们接口所在的类 要条件装配好我们用户的属性类 也就是 users

然后 以及jwtUtils的配置类

java 复制代码
 @Autowired
 private JwtUtils jwtUtils;
 @Autowired
 private users users;

然后 我们登录接口编写代码如下

java 复制代码
@PostMapping("/login")
public ResponseEntity<String> login(@RequestBody users users) {
    // 在这里进行用户验证逻辑,验证成功后生成JWT并返回给客户端
    String token = jwtUtils.generateToken(users.getId());
    return ResponseEntity.ok(token);
}

这里 我是直接不管了 不管他传什么进来 只要是符合我users类格式的 我就算他登录通过 通过getid生成一个token 返回回去

这里 我们尝试调用接口 可以看到 一起正常

然后 这里我编写逻辑 尝试校验token

我们随便放点东西 尝试请求

然后 我们用刚登录来的token 就可以了

但这里 一定要注意的是 validateToken 只是判断token的格式是否符合规范

至于过期 又或者 退出登录等等 需要我们自己去编写更完整的逻辑

相关推荐
百***86461 分钟前
springboot整合libreoffice(两种方式,使用本地和远程的libreoffice);docker中同时部署应用和libreoffice
spring boot·后端·docker
MZ_ZXD0018 分钟前
springboot流浪动物救助平台-计算机毕业设计源码08780
java·spring boot·后端·python·spring·flask·课程设计
没有bug.的程序员10 分钟前
Spring 全家桶在大型项目的最佳实践总结
java·开发语言·spring boot·分布式·后端·spring
在坚持一下我可没意见12 分钟前
Spring IoC 入门详解:Bean 注册、注解使用与 @ComponentScan 配置
java·开发语言·后端·spring·rpc·java-ee
加洛斯23 分钟前
前端小知识003:JS中 == 与 === 的区别
开发语言·前端·javascript
QT 小鲜肉23 分钟前
【Linux常用命令大全】在 Linux 系统下 Git + Vim编辑器常用指令完全指南(亲测有效)
linux·开发语言·c++·笔记·git·编辑器·vim
leonardee1 小时前
Android和JAVA面试题相关资料
java·后端
这儿有一堆花1 小时前
python视觉开发
开发语言·python
w***4241 小时前
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
java·spring boot·后端
q***97912 小时前
Spring Cloud GateWay搭建
java