在Java Spring Boot中使用JWT进行用户认证

        欢迎来到我的博客!在这篇文章中,我们将学习如何在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,希望对你有所帮助。如果你有任何问题或建议,欢迎在评论区留言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值