java Spring Boot整合jwt实现token生成并验证效果

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


<dependency>
    <groupId>io.jsonwebtokengroupId>
    <artifactId>jjwt-apiartifactId>
    <version>0.11.2version>
dependency>
<dependency>
    <groupId>io.jsonwebtokengroupId>
    <artifactId>jjwt-implartifactId>
    <version>0.11.2version>
    <scope>runtimescope>
dependency>
<dependency>
    <groupId>io.jsonwebtokengroupId>
    <artifactId>jjwt-jacksonartifactId>
    <version>0.11.2version>
    <scope>runtimescope>
dependency>

java Spring Boot整合jwt实现token生成并验证效果_第1张图片
然后 这里 我们加一个属性类 用于用户登录使用 这里 我就搞简单一点 直接 一个id 一个name了
这里需要注意的是 如果你想通过id生成token 那么 你的id必须是个字符串
java Spring Boot整合jwt实现token生成并验证效果_第2张图片
然后 随便找个能扫描到的目录创建一个类 叫 JwtUtils.java
因为登录接口要用 JwtUtils 所以 最好建在登录接口的类的同目录下
参考代码如下

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的配置类

 @Autowired
 private JwtUtils jwtUtils;
 @Autowired
 private users users;

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

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

这里 我是直接不管了 不管他传什么进来 只要是符合我users类格式的 我就算他登录通过 通过getid生成一个token 返回回去
java Spring Boot整合jwt实现token生成并验证效果_第3张图片
这里 我们尝试调用接口 可以看到 一起正常
然后 这里我编写逻辑 尝试校验token
java Spring Boot整合jwt实现token生成并验证效果_第4张图片
我们随便放点东西 尝试请求
java Spring Boot整合jwt实现token生成并验证效果_第5张图片
然后 我们用刚登录来的token 就可以了
java Spring Boot整合jwt实现token生成并验证效果_第6张图片

你可能感兴趣的:(java,spring,boot,开发语言)