欢迎来到我的博客!在这篇文章中,我们将学习如何在Spring Boot中使用JSON Web Tokens (JWT)进行用户认证。我们将从创建一个自定义的JWT解析类开始,然后展示一个在控制器中如何使用这个类进行用户登录的例子。
自定义JWT解析类
在我们的例子中,我们创建了一个叫做JwtUtils
的工具类,它包含了生成和解析JWT的方法。代码如下:
public class JwtUtils {
private static String signKey = "training";
private static Long expire = 3600000L;
//生成JWT令牌
public static String generateJwt(Map<String, Object> claims){
String jwt = Jwts.builder()
.addClaims(claims)
.signWith(SignatureAlgorithm.HS256, signKey)
.setExpiration(new Date(System.currentTimeMillis() + expire))
.compact();
return jwt;
}
//解析JWT令牌
public static Claims parseJWT(String jwt){
Claims claims = Jwts.parser()
.setSigningKey(signKey)
.parseClaimsJws(jwt)
.getBody();
return claims;
}
}
在JwtUtils
类中,我们使用Jwts
类提供的方法来生成和解析JWT。generateJwt
方法接收一个包含你要在JWT中包含的信息的Map
对象作为参数,然后使用Jwts.builder
来构造一个JWT。这个JWT会使用HS256算法和预先定义好的签名密钥进行签名。
parseJWT
方法接收一个JWT字符串作为参数,然后使用Jwts.parser
来解析这个JWT。这个方法会返回一个Claims
对象,它包含了JWT中的所有信息。
控制器中的登录方法
接下来,我们看一下登录控制器的login
方法。在这个方法中,首先接收并处理用户登录请求,然后通过iCustomerService.getCustomtoLogin(cs)
方法验证用户的身份。
如果身份验证成功,我们创建一个载荷Map
,包含用户的ID,然后使用JwtUtils.generateJwt
方法生成JWT令牌,并返回给客户端。如果身份验证失败,我们返回一个错误信息。
这个方法的代码如下:
//登录
@PostMapping("/login")
public Result login(@RequestBody Customer cs) {
log.info("Cus登录", cs);
//进行身份验证
List<Customer> listc = iCustomerService.getCustomtoLogin(cs);
//登录成功,生成令牌并下发令牌
if (!listc.isEmpty()) {
Map<String, Object> claims = new HashMap<>();
claims.put("id", listc.get(0).getId());
//使用工具类JwtUtils加密信息,jwt包含了当前登录的员工id信息
String jwt = JwtUtils.generateJwt(claims);
return Result.success(jwt);
}
//登录失败,返回错误信息
return Result.error("用户名不存在或密码错误");
}
总结
JWT在Web开发中提供了一种简洁的、自包含的方式来传递信息。本篇文章详细解析了如何在Java Spring Boot项目中生成和解析JWT,希望对你有所帮助。如果你有任何问题或建议,欢迎在评论区留言。