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的主要内容,如果未能解决你的问题,请参考以下文章