springboot整合jwt

Posted 盖丽男

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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只是所有解决方案中的一种,在清楚优缺点的情况下,选择适合当前项目的鉴权方式就可以。

以上是关于springboot整合jwt的主要内容,如果未能解决你的问题,请参考以下文章

springboot整合jwt

Springboot整合mybatis+JWT

全网最细致SpringBoot整合Spring Security + JWT实现用户认证

SpringBoot整合JWT实现登录认证

Java安全框架-Springboot整合JWT

SpringBoot2.0+Shiro+JWT 整合