在Spring Boot中,我们可以使用Java JWT(JSON Web Token)库来生成和验证JWT令牌。一个流行的库是jjwt
(Java JWT)。下面是如何在Spring Boot项目中使用jjwt
库生成和验证JWT令牌的步骤:
在你的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>
首先,我们需要创建一个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();
}
}
要验证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
头中包含此令牌。服务器将验证令牌并返回相应的用户信息。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。