背景:在开始一个项目时,目前生成token的方法主要有两种,一种是spring-security+jwt组合,另一种则是shiro+jwt组合,本文主要阐述spring-security+jwt组合生成token。对这两种框架不熟悉的同学,有兴趣可以点击去官网学习下,不熟悉的也没关系,在生成token的过程中涉及到的知识点,我会一一解答,不熟悉的也不影响阅读本文(建议独自去学习下)。
开始:
废话不多,大家都知道,要使用框架,那必不可少的,首先就是要引入相关依赖啊
1 | js复制代码//pom.xml |
除此之外,我们还需要在application.yml文件中,给jwt配置一下信息:
1 | js复制代码jwt: |
不管你是老司机,还是正在进阶的同学,我还是在这里啰嗦解析一下其中的字段。tokenHeader
是存储的一个请求头,在前端后端接口数据交互中一般都会有,以及tokenHead
一般都会存在于请求信息里,secret
是jwt加密和解密要使用到的一个密钥,expiration
是token的一个失效时间设定,我这里设置是24小时失效。
接下来我们可以去实现一个spring-security+jwt组合生成token的一个工具类JwtTokenUtil
,这个类一般都放在包的config下,下面先把代码展示出来:
1 | js复制代码/java/com.hhk,server.config.security(包路径) |
下面主要是解析一下,上面整个JwtTokenUtil的源码,自己能阅读的话,不用看下面的源码,下面主要是以方法为单位进行拆分讲解:
1 | js复制代码//在类的开始,我们需要定义两个静态字符串,以及获取我们前面在Application.yml中定义好的jwt参数,这里是通过@Value(${""})的方式获取Application.yml文件中的配置信息了 |
到这里在工具类JwtTokenUtil需要使用的静态资源就准备好了,下面我们要开始创建生成token的方法了:
1 | js复制代码/** |
承上启下,下面是generateToken(claims)
:
1 | js复制代码// 根据荷载JWT生成token |
generateToken(claims)
中使用的generateExpirationDate()
,贴一下代码:
1 | js复制代码// 生成token失效时间 |
到这里其实已经实现了生成token了,但是,既然作为工具类,那在项目中,有时候要校验token,就是通过token中的用户名去跟数据库中的用户进行对比,这时就要获取token中的用户名了,也就是源码中的getUserNameByToken(String token)
:
1 | js复制代码从token中获取登录名 |
getUserNameByToken(String token)
中使用的getClaimsFromToken(token)
是要从token中获取荷载:
1 | js复制代码// 从token中获取荷载 |
在日常开发中,或者访问网页中时,我们经常会出现需要重新登录的情况,这是,就需要重新登录,以获取新的token继续访问网页,这个过程,需要验证token是否有效、是否可以被刷新。具体方法如下:
1 | js复制代码// 验证token是否有效UserDetails是spring-security框架里的一个类 |
到这里,spring-security+jwt生成token,以及获取token中的信息的工具类就写完了,感谢阅读!❤️❤️❤️
本文转载自: 掘金