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的格式是否符合规范

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

相关推荐
没有bug.的程序员11 分钟前
《Spring Security源码深度剖析:Filter链与权限控制模型》
java·后端·spring·security·filter·权限控制
壹立科技16 分钟前
Java源码构建智能名片小程序
java·开发语言·小程序
带刺的坐椅26 分钟前
Solon v3.4.2(Java 应用开发生态基座)
java·ai·solon·liteflow·mcp
小小李程序员39 分钟前
JSON.parse解析大整数踩坑
开发语言·javascript·json
宋辰月1 小时前
Vue2-VueRouter
开发语言·前端·javascript
lang201509281 小时前
Apache Ignite 与 Spring Boot 集成
spring boot·后端·apache·ignite
小醉你真好1 小时前
Spring Boot 数据源配置中为什么可以不用写 driver-class-name
spring boot·后端·源代码管理
golitter.2 小时前
python的异步、并发开发
开发语言·python
SirLancelot12 小时前
数据结构-Set集合(一)Set集合介绍、优缺点
java·开发语言·数据结构·后端·算法·哈希算法·set
LZQqqqqo2 小时前
c#_文件的读写 IO
开发语言·c#