springboot整合jwt

目的

一般系统都有登陆和验证用户是否登陆的需求,现在的项目好多都是前后端分离的,一般的session也不适合于多台机器同时提供服务的场景,所以可以使用jwt生成token,然后使用token来鉴定该用户是否登陆/登陆是否过期等。

优缺点

优点

  • 生成token简单,可以携带简单信息
  • 验证方便,不需要数据库等二次验证

缺点

  • 一旦签发就不受服务端控制
  • 想要更新必须生成一个新的token

代码

pom引入

有两种用的比较多的jwt,大家自选一下,以下两种选用一种即可,我用的是java-jwt

        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.18.2</version>
        </dependency>

		<dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>

生成jwt

    public String generateNewJwt(User user) {
        Calendar nowTime = Calendar.getInstance();
        nowTime.add(Calendar.MINUTE,30);
        Date expiresDate = nowTime.getTime();

        return JWT.create().withAudience(user.getId().toString())   //签发对象
                .withIssuedAt(new Date())    //发行时间
                .withExpiresAt(expiresDate)  //有效时间
                .withClaim("mobile", user.getMobile())    //claim,携带信息,可自由设定内容和数量
                .sign(Algorithm.HMAC256(SecretConstant.BASE64SECRET));   //加密

    }

校验jwt

只要不抛出异常,则认为jwt还未过期

        DecodedJWT jwt = null;
        try {
            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SecretConstant.BASE64SECRET)).build();
            jwt = verifier.verify(token);
        } catch (Exception e) {
            //效验失败
        }

刷新jwt

其实就是生成一个新的token

其他用法

也有把token当成session用的,比如生成一个不过期的token,然后存到redis,使用redis做过期等的校验,这种方式还有一个好处就是,当token刷新,之前的token可以很方便的失效,因为只有在redis中存在的token才算是有效的token

总结

jwt只是所有解决方案中的一种,在清楚优缺点的情况下,选择适合当前项目的鉴权方式就可以。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盖丽男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值