这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战。
上篇文章介绍了RSA256公钥和私钥,接下来我们就可以通过公钥和私钥来实现JWT Token 的加密和解密。本篇文章将介绍通过JWT和RSA256生成Token实现给用户授权。
通过JWT和RSA256生成Token实现给用户授权
一、创建service包定义JWT相关接口
在e-commerce-authority-center子模块(即授权中心微服务)下创建一个service包,创建一个接口IJWTService,前面的I代表这是Interface,用来定义JWT相关接口,如下图:
二、实现相关接口
然后我们在service包下再创建一个impl包,用来存储实现类,创建JWTServiceImpl类。@Transactional(rollbackFor = Exception.class) 标注在类上,代表出现任意异常都会回滚。
1、生成JWT Token(generateToken)
首先需要验证用户是否能够通过授权校验, 即输入的用户名和密码能否匹配数据表记录,如果查不到,我们就打个异常日志,然后retun null。
接下来往Token中塞入对象,即JWT中存储的信息,后端拿到这些信息就可以知道是哪个用户在操作。
通过以下语句可以获取到带时区的超时时间:
ZonedDateTime zdt = LocalDate.now().plus(expire, ChronoUnit.DAYS)
.atStartOfDay(ZoneId.systemDefault());
通过以下语句可以获取到Date类型的超时时间:
Date expireDate = Date.from(zdt.toInstant());
我们还需要一个方法来获取私钥,这些方法名不需要去记,因为就是官方文档上提供的相关信息,如下图:
由于我们在最开始的父工程的pom文件中引入过JWT相关的依赖包,所以我们可以直接通过下图所示的代码来返回JWT Token。
2、注册用户并生成 Token 返回
先去校验用户名是否存在,如果存在,不能重复注册。注册一个新用户, 写一条记录到数据表中,然后生成Token并返回。可以直接调用我们前面实现的方法,需要注意password是经过MD5编码之后的字符串。
至此我们就完成了给用户授权的功能方法。