温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring Boot中JWT令牌生成与验证

发布时间:2024-11-15 12:10:02 来源:亿速云 阅读:79 作者:小樊 栏目:编程语言

在Spring Boot中,我们可以使用Java JWT(JSON Web Token)库来生成和验证JWT令牌。一个流行的库是jjwt(Java JWT)。下面是如何在Spring Boot项目中使用jjwt库生成和验证JWT令牌的步骤:

  1. 添加依赖

在你的pom.xml文件中添加jjwt库的依赖:

<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>
  1. 生成JWT令牌

首先,我们需要创建一个Java类来表示JWT令牌的载荷(claims)。例如,我们可以创建一个User类:

public class User {
    private String username;
    private String role;

    // Getters and setters
}

接下来,我们可以创建一个JwtUtil类来生成JWT令牌:

import io.jsonwebtoken.*;
import java.util.Base64;
import java.util.Date;

public class JwtUtil {

    private static final String SECRET_KEY = "yourSecretKey"; // 用于签名和验证JWT令牌的密钥
    private static final long EXPIRATION_TIME = 86400000; // JWT令牌的过期时间(毫秒)

    public static String generateToken(User user) {
        return Jwts.builder()
                .setSubject(user.getUsername()) // 将用户名作为令牌的subject
                .claim("role", user.getRole()) // 将用户角色作为额外的claims
                .setIssuedAt(new Date()) // 设置令牌的发行时间
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) // 设置令牌的过期时间
                .signWith(SignatureAlgorithm.HS512, SECRET_KEY) // 使用HS512算法和密钥进行签名
                .compact();
    }
}
  1. 验证JWT令牌

要验证JWT令牌,我们需要创建一个JwtController类来处理登录和验证令牌的请求:

import io.jsonwebtoken.*;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api")
public class JwtController {

    @PostMapping("/login")
    public String login(@RequestBody User user) {
        // 在这里,你可以根据需要验证用户的凭据(例如,检查用户名和密码)
        // 如果验证成功,使用JwtUtil生成JWT令牌并返回给客户端
        return JwtUtil.generateToken(user);
    }

    @GetMapping("/validate")
    public String validateToken(@RequestHeader("Authorization") String token) {
        try {
            Jws<Claims> jws = Jwts.parser()
                    .setSigningKey(SECRET_KEY)
                    .parseClaimsJws(token);

            // 验证成功,返回用户名
            return jws.getBody().getSubject();
        } catch (JwtException e) {
            // 验证失败,抛出异常或返回错误信息
            throw new RuntimeException("Invalid JWT token");
        }
    }
}

现在,当用户登录时,服务器将生成一个JWT令牌并返回给客户端。客户端需要在后续请求的Authorization头中包含此令牌。服务器将验证令牌并返回相应的用户信息。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI